HDU2602-Bone Collector-01背包(模板题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602

题目意思很重要。。。好吧,我又看错题了,白白的WA一次。

T   表示多少组测试数据

n,m   分别表示物品数量,和最大体积;

n个数,分别表示编号从1开始的每个物品的价值;

n个数,  分别表示编号从1开始的每个物品的体积;

求最大体积内可以获得的最大价值;

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<map>
#include<queue>
#include<cmath>
#include<stack>
#include<set>
#include<vector>
#include<algorithm>
#define LL long long
#define inf 1<<29
#define s(a) scanf("%d",&a)
#define CL(a,b) memset(a,b,sizeof(a))
using namespace std;
const int N=1005;
int n,m,a,b,c;
int cost[N];
int v[N];
int dp[N];
int main()
{
    int t,w;
    s(t);
    while(t--){
        s(n);s(w);
        int sum=0;
        for(int i=0;i<n;i++) s(v[i]);
        for(int i=0;i<n;i++) s(cost[i]);
        CL(dp,0);
        dp[0]=0;
        for(int i=0;i<n;i++)
            for(int j=w;j>=cost[i];j--)
                dp[j]=max(dp[j],dp[j-cost[i]]+v[i]);
        printf("%d\n",dp[w]);
    }
    return 0;
}


 

你可能感兴趣的:(hdu2602,01背包模板题)