您的位置:首页 > 其它

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

2013-10-17 22:09 260 查看
解题报告:01背包的变种,每种物品可以有多件,只要稍微变动一下就可以转化为01背包,转化的方法就是假设这件物品有多件的话,就将这多件展开来,也就是把每种物品的每一件都看成是01背包里面的每一件物品。这样 就可以顺利的转化为01背包了。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

int w[2005],v[2005],ans[2005];

int main()
{
int T,n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d %d",&n,&m);
int num = 0,p,h,c;
for(int i = 1;i <= m;++i)
{
scanf("%d %d %d",&p,&h,&c);
while(c--)
{
v[++num] = p;
w[num] = h;
}
}
memset(ans,0,sizeof(ans));
for(int i = 1;i <= num;++i)
for(int j = n;j >= v[i];--j)
ans[j] = max(ans[j],ans[j - v[i]] + w[i]);
printf("%d\n",ans
);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐