您的位置:首页 > 其它

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

2014-08-01 16:36 169 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191

题目意思:有 资金 n 和 m 种类型的大米,对第 i 种类型的大米,价格、数量、袋数分别是: pi, hi, ci,问最多能采购的大米的重量是多少。

多重背包入门题~~~~~~

在01 背包中两重循环之间多了一重循环 0 ~ bag[i] :表示第 i 种物品的数量从0~bag[i] 枚举。

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

const int maxn = 200 + 5;

int w[maxn], v[maxn], num[maxn];
int dp[maxn];

int main()
{
int T, money, kind;
while (scanf("%d", &T) != EOF)
{
while (T--)
{
scanf("%d%d", &money, &kind);
for (int i = 0; i < kind; i++)
scanf("%d%d%d", &v[i], &w[i], &num[i]);
memset(dp, 0, sizeof(dp));
for (int i = 0; i < kind; i++)
{
for (int j = 0; j < num[i]; j++)    // 多了这个循环!!!
{
for (int k = money; k >= v[i]; k--)
dp[k] = max(dp[k], dp[k-v[i]] + w[i]);
}
}
printf("%d\n", dp[money]);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐