首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

hdu 2191 追悼512汶川大地震遇难同胞——珍惜现在,感恩生活(完全背包)

2012-12-22 
hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(完全背包)看题目请点这里题意:中文题不解释。代码

hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(完全背包)

看题目请点这里

题意:

中文题不解释。

代码:

#include<iostream>using namespace std;#define max(x,y) x>y?x:yint i,j,p[101],h[101],c[101],dp[101];void zeroone(int i,int n)   //01背包{    int t=c[i],k=1;    while(k<t)   //2进制思想    {        for(j=n;j>=p[i]*k;j--)        {            dp[j]=max(dp[j],dp[j-p[i]*k]+h[i]*k);        }        t-=k;k*=2;    }    for(j=n;j>=p[i]*k;j--)    {        dp[j]=max(dp[j],dp[j-p[i]*t]+h[i]*t);    }}void complete(int i,int n)   //完全背包{    for(j=p[i];j<=n;j++)    {        dp[j]=max(dp[j],dp[j-p[i]]+h[i]);    }}int main(){    int C,n,m;    scanf("%d",&C);    while(C--)    {        scanf("%d %d",&n,&m);        for(i=0;i<m;i++)        {            scanf("%d %d %d",p+i,h+i,c+i);        }        memset(dp,0,sizeof(dp));        for(i=0;i<m;i++)        {            c[i]*p[i]>=n ? complete(i,n) : zeroone(i,n);   //物品充足,完全背包,否则01背包        }        printf("%d\n",dp[n]);    }    return 0;}


 

 

热点排行