HDU 2069 Coin Change

解题报告:

题目大意:输入一个数,表示要将这么多的钱换成面值为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 }
View Code
原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3087253.html