解题报告:
题目大意:输入一个数,表示要将这么多的钱换成面值为50、25、10、5、1的钱,问一共有多少种换法。
虽然说这题是水题,但我一开始没有注意题目竟然说了所有钱币的总数不超过100个,所以一直不是TLE就WA,而看了discuss之后才发现原来还有这个要求。这就好做多了,
可以直接用暴力,就是枚举每种钱币有0到n除以相应的面值的个数。但我觉得这题可以用dfs做,那在时间上会更快,但我没写出来。
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int main() { 5 int coin; 6 while(scanf("%d",&coin)!=EOF) { 7 __int64 sum=0; 8 for(int i=0;i<=coin/50;++i) 9 for(int j=0;j<=coin/25&&j<=100;++j) 10 for(int k=0;k<=coin/10&&k<=100;++k) 11 for(int x=0;x<=coin/5&&x<=100;++x) 12 for(int y=0;y<=coin&&y<=100;++y) 13 if((50*i+25*j+10*k+5*x+y)==coin&&(i+j+k+x+y)<=100) 14 sum++; 15 printf("%I64d\n",sum); 16 } 17 return 0; 18 }