题意:给出一个金额问有多少种组成方法;
思路:预处理+递推;
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; long long a[500010]; int b[]={1,2,4,10,20,40,100,200,400,1000,2000}; int main() { for(int i=0;i<=6000;i++) a[i]=1; for(int i=1;i<11;i++) { for(int j=b[i];j<=6000;j++) a[j]+=a[j-b[i]]; } double d; while(scanf("%lf",&d)!=EOF) { if(d==0.0) break; int n=int(d*20.0); printf("%6.2lf%17lld ",d,a[n]); } return 0; }