首页 > 代码库 > POJ 3260 多重背包+完全背包
POJ 3260 多重背包+完全背包
链接:
http://poj.org/problem?id=3260
题意:
你去买总价为t的东西,每种硬币你有k枚,老板有无数枚,求硬币交换数目最少的数目
题解:
你是多重背包,老板是完全背包,先预处理一下,然后计算取总和最小的就行了
代码:
31 int v[MAXN], c[MAXN];32 int dp1[MAXN], dp2[MAXN];33 int sum[MAXN];34 35 int main() {36 int n, t;37 cin >> n >> t;38 rep(i, 1, n + 1) cin >> v[i];39 rep(i, 1, n + 1) cin >> c[i];40 memset(dp1, 0x3f, sizeof(dp1));41 dp1[0] = 0;42 rep(i, 1, n + 1) {43 memset(sum, 0, sizeof(sum));44 rep(j, v[i], MAXN) if (dp1[j - v[i]] != INF && sum[j - v[i]] < c[i] && dp1[j] > dp1[j - v[i]] + 1)45 dp1[j] = dp1[j - v[i]] + 1, sum[j] = sum[j - v[i]] + 1;46 }47 48 memset(dp2, 0x3f, sizeof(dp2));49 dp2[0] = 0;50 rep(i, 1, n + 1) rep(j, v[i], MAXN) dp2[j] = min(dp2[j], dp2[j - v[i]] + 1);51 int ans = INF;52 rep(i, t, MAXN) ans = min(ans, dp1[i] + dp2[i - t]);53 if (ans == INF) ans = -1;54 cout << ans << endl;55 return 0;56 }
POJ 3260 多重背包+完全背包
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。