Dollars

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 }
View Code
原文地址:https://www.cnblogs.com/chujian123/p/3402137.html