您的位置:首页 > 其它

换钱问题(经典枚举样例)

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

#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)减少每一层的循环次数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: