BZOJ【1625】宝石手镯

1625: [Usaco2007 Dec]宝石手镯

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 1007  Solved: 684
[Submit][Status][Discuss]

Description

贝茜在珠宝店闲逛时,买到了一个中意的手镯。很自然地,她想从她收集的 N(1 <= N <= 3,402)块宝石中选出最好的那些镶在手镯上。对于第i块宝石,它的重量为W_i(1 <= W_i <= 400),并且贝茜知道它在镶上手镯后能为自己增加的魅力值D_i(1 <= D_i <= 100)。由于贝茜只能忍受重量不超过M(1 <= M <= 12,880)的手镯,她可能无法把所有喜欢的宝石都镶上。 于是贝茜找到了你,告诉了你她所有宝石的属性以及她能忍受的重量,希望你能帮她计算一下,按照最合理的方案镶嵌宝石的话,她的魅力值最多能增加多少。

Input

* 第1行: 2个用空格隔开的整数:N 和 M

* 第2..N+1行: 第i+1行为2个用空格隔开的整数:W_i、D_i,分别为第i块宝石 的重量与能为贝茜增加的魅力值

Output

* 第1行: 输出1个整数,表示按照镶嵌要求,贝茜最多能增加的魅力值

Sample Input

4 6
1 4
2 6
3 12
2 7

输入说明:

贝茜收集了4块宝石,她能忍受重量最大为6的手镯。

Sample Output

23

输出说明:

贝茜把除了第二块宝石的其余所有宝石都镶上手镯,这样她能增加
4+12+7=23的魅力值,并且所有宝石的重量为1+2+3 <= 6,同样符合要求。

HINT

Source

Silver

01背包。采药,小飞侠?

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#define maxn 100000+100
int f[maxn];
using namespace std;
int main()
{
    int n,m,x,y;
    memset(f,0,sizeof(f));
    cin>>n>>m;
    for(int i=1;i<=n;++i)
    {
        scanf("%d%d",&x,&y);
        for(int j=m;j>=x;j--)
          if(f[j]<f[j-x]+y) f[j]=f[j-x]+y;
    }
    cout<<f[m];
    return 0;
 } 

时间: 2024-08-13 17:21:38

BZOJ【1625】宝石手镯的相关文章

BZOJ 1625: [Usaco2007 Dec]宝石手镯( dp )

最裸的01背包.... --------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define clr( x , c ) memset( x , c , sizeof( x ) ) using namespace std; con

1625: [Usaco2007 Dec]宝石手镯

1625: [Usaco2007 Dec]宝石手镯 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 919  Solved: 618 [Submit][Status] Description 贝茜在珠宝店闲逛时,买到了一个中意的手镯.很自然地,她想从她收集的 N(1 <= N <= 3,402)块宝石中选出最好的那些镶在手镯上.对于第i块宝石,它的重量为W_i(1 <= W_i <= 400),并且贝茜知道它在镶上手镯后能为自己增加的魅

BZOJ_1625_ [Usaco2007_Dec]_宝石手镯_(01背包)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1625 01背包裸题. p.s.随便点开一道就是水题... 分析 ... 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn=3500,maxw=13000; 5 int n,m; 6 int w[maxn],v[maxn],dp[maxw]; 7 int main(){ 8 scanf("%d%

BZOJ 1625 [Usaco2007 Dec]宝石手镯:01背包

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1625 题意: 贝茜在珠宝店闲逛时,买到了一个中意的手镯.很自然地,她想从她收集的 N(1 <= N <= 3,402)块宝石中选出最好的那些镶在手镯上.对于第i块宝石,它的重量为W_i(1 <= W_i <= 400),并且贝茜知道它在镶上手镯后能为自己增加的魅力值D_i(1 <= D_i <= 100).由于贝茜只能忍受重量不超过M(1 <= M <

bzoj 1625: [Usaco2007 Dec]宝石手镯

Description 贝茜在珠宝店闲逛时,买到了一个中意的手镯.很自然地,她想从她收集的 N(1 <= N <= 3,402)块宝石中选出最好的那些镶在手镯上.对于第i块宝石,它的重量为W_i(1 <= W_i <= 400),并且贝茜知道它在镶上手镯后能为自己增加的魅力值D_i(1 <= D_i <= 100).由于贝茜只能忍受重量不超过M(1 <= M <= 12,880)的手镯,她可能无法把所有喜欢的宝石都镶上. 于是贝茜找到了你,告诉了你她所有宝石

[Usaco2007 Dec]宝石手镯[01背包][水]

Description 贝茜在珠宝店闲逛时,买到了一个中意的手镯.很自然地,她想从她收集的 N(1 <= N <= 3,402)块宝石中选出最好的那些镶在手镯上.对于第i块宝石,它的重量为W_i(1 <= W_i <= 400),并且贝茜知道它在镶上手镯后能为自己增加的魅力值D_i(1 <= D_i <= 100).由于贝茜只能忍受重量不超过M(1 <= M <= 12,880)的手镯,她可能无法把所有喜欢的宝石都镶上. 于是贝茜找到了你,告诉了你她所有宝石

BZOJ1625: [Usaco2007 Dec]宝石手镯

[传送门:BZOJ1625] 简要题意: 给出n个宝石,每个宝石重w[i],价值d[i],求出选择若干个宝石使得总重≤M的情况下的最大价值 题解: 背包DP(水题) 设f[j]为总重为j时的最大价值 得到方程f[j]=max(f[j],f[j-w[i]]+d[i])(1<=i<=n,w[i]<=j<=M) 参考代码: #include<cstdio> #include<cstring> #include<cstdlib> #include<

9月刷题总结

全是usaco水题.... 贪心(这个要放在首位,思想太重要): [BZOJ]1650: [Usaco2006 Dec]River Hopscotch 跳石子(二分+贪心) [BZOJ]1691: [Usaco2007 Dec]挑剔的美食家(multiset+贪心) [BZOJ]1692 & 1640: [Usaco2007 Dec]队列变换(后缀数组+贪心) [BZOJ]1620: [Usaco2008 Nov]Time Management 时间管理(贪心) [BZOJ]1634: [Usa

【一堆的背包水题】沉迷于刷水无可救药~

我在干嘛,连普及组都不会考这种题.以三四分钟一道题的速度混了一下BZOJ的题目数量. BZOJ1606: [Usaco2008 Dec]Hay For Sale 购买干草 裸的01背包. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int MAXN=5000+5; 4 const int MAXC=50000+50; 5   6 int main() 7 { 8     int c,h,v[MAXN],f[MAXC]; 9