题意:有个人收集骨灰。每份骨灰有体积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;
}