HDU--2191(多重背包)

来源:互联网 发布:淘宝q币充值改金额 编辑:程序博客网 时间:2024/06/06 02:47

HDU–2191(多重背包)

悼念512汶川大地震遇难同胞-珍惜现在,感恩生活

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191

感觉这个挺难,分享一篇一个不错的关于多重背包转化01背包讲解的文章:http://blog.csdn.net/lyhvoyage/article/details/8545852

#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){    int t;    scanf("%d",&t);    while(t--)    {        int n,m;        scanf("%d%d",&n,&m);        int w[21000],v[2100],f[110];        memset(w,0,sizeof(w));        memset(v,0,sizeof(v));        memset(f,0,sizeof(f));        int ans=0;        for(int i=0;i<m;i++)        {            int p,h,c;            scanf("%d%d%d",&p,&h,&c);            for(int j=1;j<=c;j<<=1)            {                w[ans]=j*h;                v[ans++]=j*p;                c=c-j;            }            if(c>0)            {                v[ans]=c*p;                w[ans++]=c*h;            }        }        for(int i=0;i<ans;i++)        {            for(int j=n;j>=v[i];j--)            {                if(f[j]<f[j-v[i]]+w[i])                {                    f[j]=f[j-v[i]]+w[i];                }            }        }        printf("%d\n",f[n]);    }    return 0;}

努力学习中 ing。。。。。

0 0
原创粉丝点击