hdu 2602 Bone Collector 01背包

//01背包入门题,理解01背包的思想后直接可过

//状态转移方程:   dp[j]=Max(dp[j],dp[j-v[i]]+w[i]);

#include<stdio.h>
#define N 1005
int dp[N*N]={0};
int Max(int a,int b)
{
    return a>b?a:b;
}
int main(void)
{
    int t,n,m;
    int v[N],w[N];
    scanf("%d",&t);
    while(t--)
    {
        for(int i=0;i<N*N;i++) dp[i]=0;
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
            scanf("%d",&w[i]);
        for(int i=0;i<n;i++)
            scanf("%d",&v[i]);
        for(int i=0;i<n;i++)
            for(int j=m;j>=v[i];j--)
                dp[j]=Max(dp[j],dp[j-v[i]]+w[i]);
        printf("%d\n",dp[m]);
    }
    return 0;
}
posted @ 2013-06-01 09:06  heaventouch  阅读(93)  评论(0编辑  收藏  举报