您的位置:首页 > 其它

九度 1455:珍惜现在,感恩生活(多重背包)

2014-03-11 16:06 120 查看
题目描述:

为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。请问:你用有限的资金最多能采购多少公斤粮食呢?

思路

裸多重背包, 本想练练倍增优化的, AC 后又没动力了

代码

#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std;

int weight[222];
int bags  [222];
int money [222];

int dp       [222];

int main() {
int t;
scanf("%d", &t);

for(int i = 0; i < t; i ++) {
memset(dp, 0, sizeof(dp));

int n, m;
scanf("%d%d", &n, &m);

for(int j = 0; j < m; j ++)
scanf("%d%d%d", money+j, weight+j, bags+j);

for(int j = 0; j < m; j ++) {
for(int k = n; k >= 0; k --) {
for(int s = 1; s <= bags[j]; s ++) {
if(k < s*money[j]) break;
dp[k] = max(dp[k], dp[k-s*money[j]]+s*weight[j]);
}
}
}
int res = 0;
for(int j = 0; j <= n; j ++)
res = max(res, dp[j]);

cout << res << endl;
}

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