zoukankan      html  css  js  c++  java
  • HDU 1284 钱币兑换问题 (dp)

    题目链接

    Problem Description

    在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。

    Input

    每行只有一个正整数N,N小于32768。

    Output

    对应每个输入,输出兑换方法数。

    Sample Input

    2934
    12553
    

    Sample Output

    718831
    13137761
    

    分析:

    这道题应该是一个动态规划的问题,但是也可以转换为数学的问题来解决。

    背包代码:

    #include<iostream>
    #include<stdio.h>
    #include<cstdlib>
    using namespace std;
    int main()
    {
        int dp[32770]={0},i,j;
        dp[0]=1;
        for(i=1;i<=3;i++)
            for(j=i;j<32768;j++)
            dp[j]+=dp[j-i];
            int n;
            while(~scanf("%d",&n))
            {
                printf("%d
    ",dp[n]);
            }
        return 0;
    }
    

    非背包的解法:

    #include<iostream>
    #include<stdio.h>
    #include<cstdlib>
    using namespace std;
     int main()
     {
        int n;
        while(~scanf("%d",&n))
        {
            int sum=0,i;
            for(i=0;;i++)
            {
                if(3*i<=n)
                sum=sum+(n-3*i)/2+1;
                else
                    break;
            }
            printf("%d
    ",sum);
        }
         return 0;
     }
  • 相关阅读:
    全排列(next_permutation)
    Codeforces Round #321 (Div. 2)C(tree dfs)
    cf_ducational Codeforces Round 16_D(gcd)
    cf455a(简单dp)
    cf584a(水题)
    cf112a(水题)
    冒泡排序
    Python内置类型性能分析
    常见时间复杂度
    MongoDB 备份
  • 原文地址:https://www.cnblogs.com/cmmdc/p/6766858.html
Copyright © 2011-2022 走看看