题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=83
这道题实际上和UVA357 (链接 http://www.cnblogs.com/yanblog/p/6994437.html) 是一样的。但是我花了好长时间一直是WA。最后发现是我处理数据的问题。因为所有的input都是0.05的倍数,所以我对所有数据都进行处理使得所有数据都是1的倍数。所以应该input*20,但是我用input*100/5,导致一些数据结果不一样。
代码如下:
1 #include <iostream> 2 #include <math.h> 3 #include <stdio.h> 4 #include <cstdio> 5 #include <algorithm> 6 #include <string.h> 7 #include <cstring> 8 #include <queue> 9 #include <vector> 10 #include <functional> 11 #include <cmath> 12 #define SCF(a) scanf("%d", &a) 13 #define IN(a) cin>>a 14 #define FOR(i, a, b) for(int i=a;i<b;i++) 15 typedef long long Int; 16 using namespace std; 17 18 int main() 19 { 20 double num; 21 Int ways[6005] = { 0 }; 22 int types[11] = { 1, 2, 4, 10, 20, 40, 100, 200, 400, 1000, 2000 }; 23 ways[0] = 1; 24 FOR(i, 0, 11) 25 { 26 FOR(j, types[i], 6005) 27 { 28 ways[j] += ways[j - types[i]]; 29 } 30 } 31 32 while (scanf("%lf", &num) == 1) 33 { 34 double n = num * 20; 35 int nin = (int)(n); 36 if (nin == 0) 37 break; 38 printf("%6.2lf%17lld\n", num, ways[nin]); 39 } 40 return 0; 41 }