POJ - 1787 Charlie's Change(完全背包和路径纪录)
2015-09-19 10:35
267 查看
题目大意:给出五种硬币的价值和数量,问如何用最多的硬币组成另一个数
解题思路:完全背包问题加纪录路径
解题思路:完全背包问题加纪录路径
[code]#include <cstdio> #include <cstring> const int N = 10010; int val[4] = {1, 5, 10, 25}; int dp , path , use , num[4], ans[30]; int n; void solve() { memset(dp, -1, sizeof(dp)); memset(path, -1, sizeof(path)); dp[0] = 0; path[0] = 0; for (int i = 0; i < 4; i++) { memset(use, 0, sizeof(use)); for (int j = val[i]; j <= n; j++) { if (dp[j] < dp[j - val[i]] + 1 && dp[j - val[i]] != -1 && use[j - val[i]] < num[i]) { dp[j] = dp[j - val[i]] + 1; use[j] = use[j - val[i]] + 1; path[j] = j - val[i]; } } } if (dp == -1) { printf("Charlie cannot buy coffee.\n"); return ; } memset(ans, 0, sizeof(ans)); int t = n; while (t != 0) { ans[t - path[t]]++; t = path[t]; } printf("Throw in %d cents, %d nickels, %d dimes, and %d quarters.\n", ans[1], ans[5], ans[10], ans[25]); } int main() { while (scanf("%d", &n)) { int Sum = n; for (int i = 0; i < 4; i++) { scanf("%d", &num[i]); Sum += num[i]; } if (!Sum) break; solve(); } return 0; }
相关文章推荐
- C++面试之GetMemory问题
- (转徐明吉)C#生成随机数
- Java基础知识强化29:String类之String类构造方法
- BestCoder Round #55 ($)
- JSP中文乱码处理
- 【poj3070】矩阵乘法求斐波那契数列
- Java知识整理(二十三)之json
- android message
- WPF--打开文件
- urllib2 - The Missing Manual HOWTO Fetch Internet Resources with Python
- urllib2 - The Missing Manual HOWTO Fetch Internet Resources with Python
- a中国天气网pi(json格式)
- ASM使用multipath报错:ERROR: -15
- Tizen2015中国深圳开发者大会
- Java知识整理(二十二)之Ajax
- 初学者EFM32上移植uC/OSII
- 软件开发模型
- SSH 整合(权限管理,文件上传,displaytag集成,lookup自动填写功能...)
- proc文件的读写
- 数据结构之自建算法库——顺序串