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

来源:互联网 发布:arduino蓝牙发送数据 编辑:程序博客网 时间:2024/05/17 23:38

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

解题思路:此题为多重背包,具体思想可以去看背包九讲。

#include <cstdio>#include <cstring>#include <algorithm>#include <cstdlib>using namespace std;#define M 110#define N 2010int n,m,ca,tot,z,w,v;int dp[N];int main(){    scanf("%d",&ca);    while(ca--)    {        scanf("%d%d",&m,&n);        memset(dp,0,sizeof(dp));        for(int i=1;i<=n;++i)        {            scanf("%d%d%d",&w,&v,&z);            if(w*z>=m)            {                for(int j=w;j<=m;++j)                    dp[j]=max(dp[j],dp[j-w]+v);            }            else            {                int k=1;                while(k<z)                {                    for(int j=m;j>=k*w;--j)                        dp[j]=max(dp[j],dp[j-k*w]+k*v);                    z-=k;                    k<<=1;                }                for(int j=m;j>=z*w;--j)                    dp[j]=max(dp[j],dp[j-z*w]+z*v);            }        }        printf("%d\n",dp[m]);    }    return 0;}


0 0
原创粉丝点击