zoukankan      html  css  js  c++  java
  • hdu 1284

    钱币兑换问题

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7261    Accepted Submission(s): 4265

    Problem Description
    在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
     
    Input
    每行只有一个正整数N,N小于32768。
     
    Output
    对应每个输入,输出兑换方法数。
     
    Sample Input
    2934 12553
     
    Sample Output
    718831 13137761
     
    Author
    SmallBeer(CML)
     
    Source
     
    Recommend
    lcy   |   We have carefully selected several similar problems for you:  1171 2191 2602 1248 1203 
    这题可以采用母函数或者递推或者其他规律。
    设d[i][j]为前i个硬币可以兑换j的兑法,考虑第i个,要么不取,兑法就为d[i-1][j],要么取,兑法就为d[i-1][j-v[i]];v[i]==i;
    d[i][j]就等于这两种情况之和.(每种硬币的取还是不取的选择,从结果来看,能够包含兑换成j的硬币序列组合,就是说决策能够包含了所以可能的结果)。
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    long long  d[42768];
    void init()
    {
        memset(d,0,sizeof(d));
    }
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            init();
            if(n==0)
             {
                 printf("0
    ");
                 continue;
             }
            if(n==1)
            {
                printf("1
    ");
                continue;
            }
            d[0]=1;
             for(int i=1;i<=3;i++)
                for(int j=i;j<=n;j++)
             {
    
                  d[j]=d[j]+d[j-i];
             }
            printf("%lld
    ",d[n]);
        }
        return 0;
    }
  • 相关阅读:
    数据库相关(转)
    sql之left join、right join、inner join的区别
    PHP面试编程
    实验6 shell程序设计一(1)
    实验7 shell程序设计二(1)
    Linux软件安装管理
    Linux常用命令总结
    合唱团
    linux课后作业1
    linux网络服务实验
  • 原文地址:https://www.cnblogs.com/xianbin7/p/4530803.html
Copyright © 2011-2022 走看看