链接:点击打开链接
和uva 674 差不多一样,就是这个涉及精度,那个dp[i]数组得用long long型,这个的注意,注意精度基本就是一个简单的完全背包问题,我那个钱币种类露掉一个,害的我WA几次。。。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
long long dp[30010];
int main(){
int i,j,m;
int a[11]={5,10,20,50,100,200,500,1000,2000,5000,10000};
double n;
while(~scanf("%lf",&n)){
if(n<1e-9)
break;
m=(int)(n*100+0.5f);
memset(dp,0,sizeof(dp));
dp[0]=1;
for(i=0;i<11;i++)
for(j=0;j<=m;j++)
if(j>=a[i])
dp[j]+=dp[j-a[i]];
printf("%6.2lf%17lld\n",n,dp[m]);
}
return 0;
}