先把面額都變成整數會比較好算,
1 / 0.05 = 20,
面額跟input都乘以20就能變整數。
/* ACM 147 Dollars
* mythnc
* 2011/12/13 14:56:54
* run time: 0.012
*/
#include <stdio.h>
#define MAXN 6001
#define COIN 11
void cal(long long *);
int main(void)
{
long long ans[MAXN] = { 0 };
double n;
cal(ans);
while (scanf("%lf", &n) && n != 0.0)
printf("%6.2f%17lld\n", n, ans[(int)(n * 20)]);
return 0;
}
/* cal: pre calulate answer */
void cal(long long *ans)
{
int money[] = {1, 2, 4, 10, 20, 40,
100, 200, 400, 1000, 2000};
int i, j;
ans[0] = 1;
for (i = 0; i < COIN; i++)
for (j = money[i]; j < MAXN; j++)
ans[j] += ans[j - money[i]];
}
沒有留言:
張貼留言