UVa 147 Dollars

无数次WA换来一次AC,只因没有使用long long int。。。

 1 # include <stdio.h>
2 # include <math.h>
3
4 const int coin[] = {0,5,10,20,50,100,200,500,1000,2000,5000,10000};
5
6 long long int f[6010][12];
7
8 long long int dp(int m, int i);
9
10 int main()
11 {
12 double c;
13
14 while (1)
15 {
16 scanf("%lf", &c);
17 if ((int)(c*100) == 0) break;
18 printf("%6.2lf%17lld\n", c, dp((int)(c*20),11)); // 一次WA:dp((int)(c*20),10)
19 }
20
21 return 0;
22 }
23
24 long long int dp(int m, int i)
25 {
26 int k;
27 if (m == 0 || i <= 1) return f[m][i] = 1;
28 if (f[m][i] > 0) return f[m][i];
29 f[m][i] = 0;
30 for (k = 0; k <= m; k += coin[i]/5)
31 f[m][i] += dp(m - k, i-1);
32 return f[m][i];
33 }



原文地址:https://www.cnblogs.com/JMDWQ/p/2429786.html