【HDU-2602】Bone Collector

72 阅读1分钟
题意

就是你有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…