UVa 147 Dollars Solution

#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
using namespace std;
vector<int> coin={5,10,20,50,100,200,500,1000,2000,5000,10000};
vector<vector<long long int> > dp(11,vector<long long int>(30001,-1));
long long int cc(int i,int sum){
    if(sum==0)return 1;
    if(i==coin.size())return 0;
    if(coin[i]>sum)return dp[i][sum]=0;
    if(dp[i][sum]!=-1)return dp[i][sum];
    return dp[i][sum]=cc(i+1,sum)+cc(i,sum-coin[i]);
}
int main(){
    double n;
    while(cin>>n){
        n*=100;
        int m=round(n);
        n/=100;
        if(m==0)return 0;
        // for(auto &i:dp)
        // fill(i.begin(),i.end(),-1);
        cout<<setprecision(2)<<setw(6)<<fixed<<n<<setw(17)<<fixed<<cc(0,m)<<endl;
    }
    return 0;
}

Comments