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;

}

 

你可能感兴趣的:(Collector)