POJ3260--The Fewest Coins(混合背包)
来源:互联网 发布:软件 win7 开机启动 编辑:程序博客网 时间:2024/05/17 00:50
题目大意:一个人去买M元的东西,身上有N种面值的钱币,每个种钱币面额为w[i],个数是c[i],售货员当然是各种钱币都有,并且足够找他钱的啦~现在这个人给这M元的东西要付款了,他想使得付出的钱和找回的钱的个数最少。问最少多少个?
分析:多重背包+完全背包。对于消费者来说,就是一个多重背包。对于售货员来说,就是一个完全背包。
数组的上界处理叫做鸽笼原理?
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define INF 1<<29const int maxv = 123;int dp[maxv*maxv], f[maxv*maxv];int v[111], c[111];int n, m;int main() { while(~scanf("%d%d", &n, &m)) { int V = 0; for(int i = 1; i <= n; i++) { scanf("%d", &v[i]); V = max(V, v[i]); } for(int i = 1; i <= n; i++) scanf("%d", &c[i]); V = V*V+m+1; fill(dp, dp+V+1, INF); dp[0] = 0; //多重背包 for(int i = 1; i <= n; i++) { if(c[i]*v[i] >= V) { for(int j = v[i]; j <= V; j++) dp[j] = min(dp[j], dp[j-v[i]]+1); } else { int k = 1; while(k<c[i]) { for(int j = V; j >= v[i]*k; j--) dp[j] = min(dp[j], dp[j-v[i]*k]+k); c[i] -= k; k *= 2; } for(int j = V; j >= c[i]*v[i]; j--) dp[j] = min(dp[j], dp[j-v[i]*c[i]]+c[i]); } } fill(f, f+V+1, INF); f[0] = 0; //完全背包 for(int i = 1;i <= n; i++) for(int j = v[i]; j <= V; j++) f[j] = min(f[j], f[j-v[i]]+1); int ans = INF; for(int i = 0; i <= V-m; i++) ans = min(ans, dp[i+m]+f[i]); if(ans == INF) ans = -1; printf("%d\n", ans); } return 0;}
0 0
- POJ3260--The Fewest Coins(混合背包)
- POJ3260:The Fewest Coins(混合背包)
- POJ3260---The Fewest Coins(混合背包)
- poj3260 The Fewest Coins
- poj3260 The Fewest Coins
- 【POJ3260】【The Fewest Coins】
- 【POJ3260】【The Fewest Coins】
- POJ3260 The Fewest Coins
- POJ3260 The Fewest Coins 多重背包+完全背包
- 【POJ3260】The Fewest Coins 多重背包+完全背包
- POJ 3260 The Fewest Coins / 混合背包
- POJ_3260 The Fewest Coins(混合背包)
- 【DP|混合背包】POJ-3260 The Fewest Coins
- poj 3260 The Fewest Coins(背包)
- poj 3260 The Fewest Coins(背包)
- POJ 3260 The Fewest Coins(混合背包+鸽巢原理)
- poj3260[USACO2006,Dec]The Fewest Coins最少找零
- poj 3260 The Fewest Coins(多重背包+完全背包)
- Binary Tree Paths
- SQL Server2012 元数据管理器中存在错误
- [笔记] 大家一起来测试,benchmark起来(MySQL下的TPC-C,TPC-H,TPC-W)
- HDOJ 4456 Crowd 离散化+二维树状数组
- Hibernate复合主键映射
- POJ3260--The Fewest Coins(混合背包)
- 控件
- 关于Android4.0之后主线程无法访问网络的解决方案
- 一个聊天界面
- c++の文件读写
- 数组的引用于引用数组
- JavaSE增强之反射
- 台湾国立大学机器学习基石.听课笔记(第十六讲二):Three Learning Principle
- Java之美[从菜鸟到高手演变]之设计模式