Hdu-2069_Coin Change

来源:互联网 发布:crm软件的使用方法 编辑:程序博客网 时间:2024/03/28 23:02

Hdu-2069_Coin Change 

题意:有若干5种面值的硬币,分别是1分,5分,10分,20分,50分。求现在表示钱数n(n<250),有多少种方案?

乍一看是母函数的题,但是后面说,每一种方案 硬币数目不超过100;

我们可以看出,该题就是指定因子的整数划分

用动态规划,dp[j][k]=dp[j][k] + dp[j-1][k-b[i]];

注意:测试用例有n=0的情况正确的结果应该输出1。这里wa了!汗

#include <iostream>#include <cstdio>#include <cstring>#include <vector>using namespace std;#define M 252int money[5]={1,5,10,25,50};int dp[102][M];void solve(){    memset(dp,0,sizeof(dp));    dp[0][0]=1;//注意初始化    int i,j,k;    for(i=0;i<5;i++)    for(j=1;j<=100;j++)//硬币个数    {        for(k=money[i];k<M;k++)//k是组合得到的money 数        dp[j][k]=dp[j][k] + dp[j-1][k-money[i]];    }}int main(){    solve();    int n,j,ans;    while(cin>>n)    {       if(n==0){printf("1\n");continue;}       ans=0;       for(j=1;j<=n&&j<=100;j++)            ans+=dp[j][n];       cout<<ans<<endl;    }    return 0;}





原创粉丝点击