http://acm.hdu.edu.cn/showproblem.php?pid=2602
分析:有一个酷爱收集骨头的人有一个体积为V的口袋,在他的旅途中会遇到很多价值、体积不一样的骨头,问一路上他能够收集到的骨头价值最大为多少;
简单的01背包问题(遇到一个骨头选还是不选,使得最终价值最大)
代码:
//hdu 2602 bone cellector
#include <iostream>
#include <string.h>
using namespace std;
int N,V;
int c[1001],v[1001],f[1001];
int main()
{
int t;
cin>>t;
while(t--){
cin>>N>>V;
for(int i=1;i<=N;i++) cin>>v[i];
for(int i=1;i<=N;i++) cin>>c[i];
memset(f,0,sizeof(f));
for(int i=1;i<=N;i++) //i件物品
for(int j=V;j>=c[i];j--)
if(f[j]<f[j-c[i]]+v[i]){
f[j]=f[j-c[i]]+v[i];
}
cout<<f[V]<<endl;
}
return 0;
}