首页 > 代码库 > hdu 2602 Bone Collector (01 背包基础)

hdu 2602 Bone Collector (01 背包基础)

http://acm.hdu.edu.cn/showproblem.php?pid=2602

 

题意 : n个骨头 m的容量

          给出n个骨头的 value 和 volume

         求m能容纳的最大价值

 

思路 :  

 dp[j]=max(dp[j],dp[j-w[i]]+v[i]);

 

 

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){    int n,m,t;    int v[1000+10],w[1000+10];    int dp[1000+10];    int i,j,k;    scanf("%d",&t);    while(t--)    {        memset(dp,-1,sizeof(dp));        dp[0]=0;        int ans=0;        scanf("%d%d",&n,&m);        for(i=1;i<=n;i++) scanf("%d",&v[i]);        for(i=1;i<=n;i++) scanf("%d",&w[i]);        for(i=1;i<=n;i++)        {            for(j=m;j>=w[i];j--)            {                if(dp[j-w[i]]!=-1)                {                    dp[j]=max(dp[j],dp[j-w[i]]+v[i]);                    if(ans<dp[j]) ans=dp[j];                }            }        }        printf("%d\n",ans);    }    return 0;}

 

hdu 2602 Bone Collector (01 背包基础)