兑换零钱
来源:互联网 发布:深圳找工作知乎 编辑:程序博客网 时间:2024/03/28 23:30
#include <iostream>#include <list>using namespace std;//我们知道人民币有1、2、5、10、20、50、100这几种面值。//现在给你n(1≤n≤250)元,让你计算换成用上面这些面额表示且总数不超过100张,共有几种。//比如4元,能用4张1元、2张1元和1张2元、2张2元,三种表示方法。void print_result(list<int> result){ list<int>::const_iterator iter = result.begin(); for(; iter != result.end(); ++iter) printf("%d ", *iter); printf("\n");}void my_count(int *a, int len, int index, int max_time, int money, int &num, list<int> result){ if(money == 0) { print_result(result); num++; return; } else if(money < 0 || result.size() > max_time) { return; } for(int i=index; i<len; i++) { result.push_back(a[i]); my_count(a, len, i, max_time, money-a[i], num, result); result.pop_back(); }}int count(int *a, int len, int max_time, int money){ list<int> result; int num = 0; int index = 0; my_count(a, len, index, max_time, money, num, result); return num;}int main(){ int a[7] = {1, 2, 5, 10, 20, 50, 100}; int money = 250; int max_time = 10; printf("%d has %d methods\n", money, count(a, 7, max_time, money)); return 0;}
这个题目在论坛上那个看说可以用动态规划法,但是一直也没搞明白怎么用,如果用递归的话效率是很低的。还有,如果只要找出组合的方法,就不用result记录了,用个数组result[7],在入栈前把相应入栈的元素加1就好了。
- 兑换零钱
- hdu 1284 兑换零钱
- 零钱兑换问题
- 一个关于兑换零钱的豆瓣笔试题
- SICP 习题 (2.19) 解题总结:重写零钱兑换程序
- 动态规划-背包问题、兑换零钱问题、旅行商问题
- 零钱..
- 深入解析之将100元兑换为1元、5元、10元的零钱,请问有多少种兑换方法
- 零钱问题
- 找零钱
- 零钱组合
- 找零钱
- 换零钱
- 找零钱
- 找零钱
- 找零钱
- 找零钱!
- 找零钱
- hdu_1114
- Eclipse Java开发环境搭建
- 主定理和递归式复杂度分析
- 【翻译】两种高性能I/O设计模式(Reactor/Proactor)的比较
- const详解
- 兑换零钱
- Serialization:Serializing an Object
- hdoj 3487 Play with Chain
- POJ 2391 Ombrophobic Bovines(最大流)
- NoSQL数据库全方位比较
- 6_8_2编写一个应用程序,该程序使用2个命令行参数,分别把值放在一个字符串和一个整形变量中,然后显示这些值
- arcgis mxd 文档
- C++内存泄漏检查心得
- 把数组排成最小的数以及Java中的Comparable接口