您的位置:首页 > 其它

HDU 2602 Bone Collector 01背包

2015-01-31 21:18 363 查看
题意:有个人收集骨灰。每份骨灰有体积w,价值v。现在有N份骨灰,他有一个体积为V的箱子。问这个人能得到的最大价值是多少。

思路:非常裸的01背包。

注意:对自己提个醒,就是dp[i]的定义是:背包容量不大于i得到的最大价值。写代码的时候应该是记错了。

代码如下:

#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

int w[1010],dp[1010],v[1010];

int main(void)
{
//freopen("input.txt","r",stdin);
int T,N,V;
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&V);
for(int i = 0; i < N; ++i)
scanf("%d",v+i);
for(int i = 0; i < N; ++i)
scanf("%d",w+i);
memset(dp,0,sizeof(dp));
for(int i = 0; i < N; ++i)
for(int j = V; j >= w[i]; --j)
dp[j] = max(dp[j],dp[j-w[i]]+v[i]);
printf("%d\n",dp[V]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: