首页 > 代码库 > poj 1276 多重背包
poj 1276 多重背包
#include <iostream>using namespace std;int cash, n, m[13], d[13];int f[100100];int money, i, v, temp, k;int solve() { memset(f, 0, sizeof(f)); money = 0; f[0] = 1; for (i=1; i <= n; i++) { for (v=cash; v >=0; v--) { if (f[v]) { for (k=1; k <= m[i]; k++) { temp = v + k*d[i]; if (temp > cash) break; if (temp > money) money = temp; f[temp] = 1; } } } } return money;}int main(){ while (scanf("%d %d", &cash, &n) != EOF) { for (i=1; i <= n; i++) { scanf("%d %d", &m[i], &d[i]); } printf("%d\n", solve()); } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。