HDU 2602 Bone Collector(01背包)

来源:互联网 发布:单片机与arm的异同 编辑:程序博客网 时间:2024/05/21 10:49

题目链接:
HDU 2602 Bone Collector
注意:
单个背包的重量和总容量允许为0。

#include <cstdio>#include <cstring>#include <algorithm>#include <climits>using namespace std;const int MAX_N=1010;int T,n,v;int val[MAX_N],cost[MAX_N],dp[MAX_N];int main(){    //freopen("hdu2602in.txt","r",stdin);    scanf("%d",&T);    while(T--){        scanf("%d%d",&n,&v);        for(int i=1;i<=n;i++){            scanf("%d",&val[i]);        }        for(int i=1;i<=n;i++){            scanf("%d",&cost[i]);        }        memset(dp,0,sizeof(dp));        /*        //set: dp[MAX_N][MAX_N]   78MS 5404K        for(int i=1;i<=n;i++){            for(int j=0;j<=v;j++){                if(j<cost[i]) dp[i][j]=dp[i-1][j];                else dp[i][j]=max(dp[i-1][j],dp[i-1][j-cost[i]]+val[i]);                //printf("dp[%d][%d]=%d\n",i,j,dp[i][j]);            }        }        */        //set: dp[MAX_N]  滚动数组 31MS 1416K        for(int i=1;i<=n;i++){            for(int j=v;j>=cost[i];j--){                dp[j]=max(dp[j],dp[j-cost[i]]+val[i]);            }        }        printf("%d\n",dp[n][v]);    }    return 0;}
0 0
原创粉丝点击