【0-1背包】HDU-2602 Bone Collection

来源:互联网 发布:cms监控软件怎么连手机 编辑:程序博客网 时间:2024/06/05 19:43

题目地址 http://acm.hdu.edu.cn/showproblem.php?pid=2602


题目分析:因为是骨头,只能取整个的,因此属于动态规划里面的0-1背包类型。动态规划里面的0-1背包问题的核心代码有三种形式,其中最优化的是滚动数组的方法,其缺点也是明显的,其在打印方案时比较困难,因为只有最后一个阶段的状态值。但是本题不需要进行打印方案,所以可以用此方法。、


AC代码如下:


#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1100;int T,N,V;int val[maxn]={0},vol[maxn]={0};int f[maxn][maxn]={0},dp[maxn]={0};int main(){    int i,j;    scanf("%d",&T);    while(T--){        scanf("%d%d",&N,&V);        memset(val,0,sizeof(val));        memset(vol,0,sizeof(vol));        memset(dp,0,sizeof(dp));        //memset(f,0,sizeof(f));        for(i=1;i<=N;i++)            scanf("%d",&val[i]);        for(i=1;i<=N;i++)            scanf("%d",&vol[i]);        for(i=0;i<=N;i++)            for(j=0;j<=N;j++)                f[i][j]=0;        for(i=1;i<=N;i++){            for(j=V;j>=0;j--){                if(j>=vol[i])                    dp[j]=max(dp[j],dp[j-vol[i]]+val[i]);   }}        printf("%d\n",dp[V]);    }    return 0;}


0 0
原创粉丝点击