HDOJ 2602 Bone Collector (01背包)

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

题意:求最大价值

思路:典型的01背包

#include<stdio.h>
#include<string.h>
#define N 1111
int main()
{
    int t,n,v,val[N],vol[N],dp[N],i,j;
    while(scanf("%d",&t)==1)
    {
        while(t--)
        {
            scanf("%d %d",&n,&v);
            for(i=1;i<=n;i++)
                scanf("%d",&val[i]);
            for(i=1;i<=n;i++)
                scanf("%d",&vol[i]);
            memset(dp,0,sizeof(dp));
            for(i=1;i<=n;i++)
            {
                for(j=v;j>=vol[i];j--)
                {
                    if(dp[j]<dp[j-vol[i]]+val[i])
                        dp[j]=dp[j-vol[i]]+val[i];
                }
            }
            printf("%d\n",dp[v]);
        }
    }
    return 0;
}


你可能感兴趣的:(HDOJ 2602 Bone Collector (01背包))