完全背包
#include <stdio.h>
#include <math.h>
#include <string.h>
long long dp[12][30005];
int huobi[12] ={
0, 5, 10, 20,
50, 100, 200, 500,
1000, 2000, 5000, 10000
};
void func(int mon){
int i, j, k, remain;
for(i=0; i<=11; i++){
if(0 == i){
dp[i][0] = 1;
memset(dp+1, 0, sizeof(long long)*mon);
continue;
}
for(j=mon; j>=0; j--){
if(j < huobi[i]){
dp[i][j] = 0;
}
else{
dp[i][j] = 0;
remain = j-huobi[i];
while(remain >= 0){
for(k=i-1; k>=0; k--) dp[i][j] += dp[k][remain];
remain -= huobi[i];
}
}
}
}
}
void _func(int mon){
long long result;
int i;
result = 0;
for(i=0; i<=11; i++)
result += dp[i][mon];
printf("%6.2lf%17lld\n", mon/100.0, result);
}
int main(void){
double mon;
//freopen("input.dat", "r", stdin);
func(30000);
while(scanf("%lf", &mon), !(mon==0.0)){
_func(int(mon*100+0.5)); //写成_func(floor(mon*100))就wrong,浮点精度出错,太恶心了
}
return 0;
}