uva 357 Let Me Count The Ways 简单dp

来源:互联网 发布:js如何给文本框赋值 编辑:程序博客网 时间:2024/05/29 09:09
#include<iostream>#include<cstdio>#include<cstdlib>#include<cmath>#include<string>#include<cstring>#include<algorithm>#include<queue>#include<stack>#include<map>using namespace std;const int NUM_COINS=5;const int MAXN=30000;int coins[NUM_COINS]={50,25,10,5,1};long long d[MAXN+5][NUM_COINS];long long dp(int x,int y){    if(d[x][y]!=-1)return d[x][y];    d[x][y]=0;    if(y==NUM_COINS-1)    {        return d[x][y]=1;    }    for(int i=0;;i++)    {        if(x-coins[y]*i>=0)        {            d[x][y]+=dp(x-coins[y]*i,y+1);        }        else            break;    }    return d[x][y];}int main(){    //freopen("in.txt","r",stdin);    int n;    memset(d,-1,sizeof(d));    while(cin>>n)    {        long long m=dp(n,0);        if(m==1)            cout<<"There is only 1 way to produce "<<n<<" cents change."<<endl;        else            cout<<"There are "<<dp(n,0)<<" ways to produce "<<n<<" cents change."<<endl;    }    return 0;}

0 0