题意
就是你有N个东西,有各自的价值和重量,现在你有一个能装一定重量的背包,问怎样选择才能使背包里面的东西价值最大?
思路
0-1背包,每个物品只有一个,只有拿或不拿两种情况。不要求重量已经排好序。
样例
Sample Input
1
5 10
1 2 3 4 5
5 4 3 2 1
Sample Output
14
AC代码
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int t,N,V;
int f[1002];
int volume[1002], value[1002];
int main()
{
cin>>t;
while(t--)
{
memset(f, 0, sizeof(f));
cin >> N >> V;
for(int i = 1; i <= N; ++i)
cin>> value[i];
for(int i = 1; i <= N; ++i)
cin>> volume[i];
for(int i = 1; i <= N; ++i)
{
for(int j = V; j >= volume[i]; --j)
{
f[j] = max(f[j], f[j- volume[i]]+ value[i]);
}
}
cout<<f[V]<<endl;
}
return 0;
}
题源:acm.hdu.edu.cn/showproblem…