一道01背包的裸题,不带拐弯的裸题...看代码吧
AC代码:
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1005; //数组不要开太小,不然会WA
int dp[MAXN];
int val[MAXN]; //存价值
int v[MAXN]; //存体积
int T,n,m;
int main()
{
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&val[i]);
}
for(int i=0;i<n;i++){
scanf("%d",&v[i]);
}
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++){ //遍历每一个骨头
for(int j=m;j>=v[i];j--){ //01背包过程
dp[j] = max(dp[j],dp[j-v[i]]+val[i]);
}
}
printf("%d\n",dp[m]);
}
return 0;
}
/*
[来源] HDU 2602
[题目] Bone Collector
[大意]
01背包裸题,输入n,m两个数代表骨头个数和你的背包的容量然后输入两行n个数,第一行表示骨头的价值,
第二行表示骨头的大小,然后就是一个01背包的模板了。
[输入]
1
5 10
1 2 3 4 5
5 4 3 2 1
[输出]
14
*/