Hdu 2602 - Bone Collector

简单的0-1背包问题

 

 

动规方程是: f[j]=max(f[j],f[j-v[i]]+w[i])

 

 

AC代码如下:

#include <stdio.h>
#include <string.h>
int n,v,w[1050],c[1050];
int dp[10000];
int max(int a,int b)
{
    if(a>b) 
        return a;
    else
        return b;
}
void pack(int cost,int weight)
{
    int j;
    for(j=v;j>=cost;j--)
        dp[j]=max(dp[j],dp[j-cost]+weight);
}
int main()
{
    int t,i;
    scanf("%d",&t);
    while(t--)
    {
        memset(dp,0,sizeof(dp));
        scanf("%d %d",&n,&v);
        for(i=0;i<n;i++)
            scanf("%d ",&w[i]);
        for(i=0;i<n;i++)
            scanf("%d ",&c[i]);
        for(i=0;i<n;i++)
            pack(c[i],w[i]);
        printf("%d\n",dp[v]);
    }
    return 0;
}

你可能感兴趣的:(Hdu 2602 - Bone Collector)