uva147:
题意:给你几种钱币,在给你一个钱的数目,问有多少种用这些钱来组成这个数目。
题解:完全背包,不过此时要把钱的数目*100,因为是小数,背包的容量都是整数,然后dp,求出每个容量的数目即可
1 #include<cstring> 2 #include<cstdio> 3 #include<algorithm> 4 #include<iostream> 5 #include<iomanip> 6 using namespace std; 7 int we[13]; 8 long long dp[30003]; 9 int main(){ 10 we[1]=5;we[2]=10;we[3]=20;we[4]=50;we[5]=100; 11 we[6]=200;we[7]=500;we[8]=1000;we[9]=2000;we[10]=5000;we[11]=10000; 12 float ss; 13 memset(dp,0,sizeof(dp)); 14 dp[0]=1; 15 for(int i=1;i<=11;i++){ 16 for(int j=0;j<=30002;j++){ 17 if(j>=we[i]) 18 dp[j]+=dp[j-we[i]]; 19 } 20 } 21 cout<<fixed<<showpoint<<setprecision(2); 22 while(cin>>ss&&ss){ 23 cout<<setw(6)<<ss<<setw(17)<<dp[(int)(100*ss+0.5)]<<endl;//注意这里加0.5.是为了减少误差 24 } 25 26 27 }