zoukankan      html  css  js  c++  java
  • HDU 1284

    HDU  1284   - 钱币兑换问题
    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

    Description

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

    Input

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

    Output

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

    Sample Input

    2934
    12553
     

    Sample Output

    718831
    13137761
     
     
    dp                               [i][0] [i][1] [i][2] [i][3] [i][4]    
    没有硬币    i=0; 0 0   0 0 0    
    有1分硬币  i=1; 1(考虑到边界情况,规定为1) 1 1 1 1    
    有1分、2分硬币  i=2; 1 1 2 2 3    
    有1分、2分、3分硬币   i=3; 1 1 2 3 5    
    状态的意义:dp[i][j]表示有1到i这i种硬币,兑换j分有dp[i][j]种方法
       状态转移方程:dp[i][j]=dp[i-1][j]+dp[i][j-i]+dp[i][j-2*i]+...dp[i][j-n*i];
     
    决策:新加入一种硬币后,可以选1个,也可以选2个...选n个
     
    以下代码简化为一维数组
     
     
    我的代码:

    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<iostream>
    #include<cmath>
    #include<algorithm>
    #include<climits>
    #include<queue>
    #include<vector>
    #include<map>
    #include<sstream>
    #include<set>
    #include<stack>
    using namespace std;
    //typedef long long ll;
    //ifstream fin("input.txt");
    //ofstream fout("output.txt");
    //fin.close();
    //fout.close();
    int dp[32775];
    int main()
    {
    int i,j,n;
    memset(dp,0,sizeof(dp));
    dp[0]=1;
    for(i=1;i<=3;i++)
    {
    for(j=i;j<=32775;j++)
    {
    dp[j]+=dp[j-i];
    }
    }
    while(scanf("%d",&n)==1)
    {
    printf("%d ",dp[n]);


    }

    return 0;
    }

  • 相关阅读:
    js拷贝
    git
    移动端网页电话号码的拨打
    es6 promise对象
    h5调用qq客户端
    ActiveMQ中的Destination高级特性(一)
    ActiveMQ集群下的消息回流功能
    ActiveMQ的静态网络链接
    深入理解IoC/DI
    ActiveMQ启动多个broker
  • 原文地址:https://www.cnblogs.com/yskyskyer123/p/4513904.html
Copyright © 2011-2022 走看看