换钱问题(经典枚举样例)
2016-03-01 10:11
99 查看
Ø要将一张100元的大钞票,换成等值的10元、5元、2元、1元一张的小钞票,每次换成40张小钞票,每种至少1张。如,有一种换法:
Ø 10元: 1 张
Ø 5元: 5 张
Ø 2元: 31 张
Ø 1元: 3 张
Ø问:一共有多少种换法。
数学模型:
Ø10元: a 张 (不超过10张)
Ø 5元: b 张 (不超过20张)
Ø 2元: c 张 (不超过50张)
Ø 1元: d 张 (不超过100张)
Ø不定方程:
Ø10*a+5*b+2*c+d=100
Øa+b+c+d=40
Øa>=1;b>=1;c>=1;d>=1
Ø方程有多少组正整数解?
方法1:
枚举abcd
View Code
结论:即使采用暴力枚举,也要认真分析问题。
常用的枚举优化措施:
(1)减少枚举层数;
(2)减少每一层的循环次数
Ø 10元: 1 张
Ø 5元: 5 张
Ø 2元: 31 张
Ø 1元: 3 张
Ø问:一共有多少种换法。
数学模型:
Ø10元: a 张 (不超过10张)
Ø 5元: b 张 (不超过20张)
Ø 2元: c 张 (不超过50张)
Ø 1元: d 张 (不超过100张)
Ø不定方程:
Ø10*a+5*b+2*c+d=100
Øa+b+c+d=40
Øa>=1;b>=1;c>=1;d>=1
Ø方程有多少组正整数解?
方法1:
枚举abcd
#include<cstdio> int main(){ int s=0,a,b,c,d; for(a=1;a<=7;a++) for(b=1;b<=17;b++){ c=60-(9*a+4*b); d=8*a+3*b-20; if(c>0&&d>0){ s=s+1; printf("%d : %d %d %d %d\n",s,a,b,c,d); } } return 0; }
View Code
结论:即使采用暴力枚举,也要认真分析问题。
常用的枚举优化措施:
(1)减少枚举层数;
(2)减少每一层的循环次数
相关文章推荐
- 2.5.1 Ext.get方法的使用
- linux的帮助命令
- Android应用启动优化:一种DelayLoad的实现和原理
- VMware-workstation中文版修改成英文版简单方法
- LeetCode:181. Employees Earning More Than Their Managers
- 自我质量管控
- iOS开发中 色值 16进制相互转换 详细RGB值
- 开通博客了
- 易出错的C语言题目之二:指针
- Nginx配置文件nginx.conf中文详解
- nginx实现代理和负载均衡
- Repaint/Reflow 的基本认识和优化
- 飞机大战
- 通过文件的md5码比对两个文件是否一样
- LeetCode OJ刷题历程——Two Sum
- 北京Uber优步司机奖励政策(3月1日)
- (转)Android DiskLruCache完全解析,硬盘缓存的最佳方案
- 错误:readline/readline.h:没有那个文件或目录解决方法
- GIS导论(1)
- 九度题目1069