zoukankan      html  css  js  c++  java
  • hdu 1284 钱币兑换

    题目

    我们用dp[n]表示用这些硬币组成n的方法总数。。。。
    然后随着硬币种类的增加来更新dp[]的值,也就是最外面的一层循环for(i :1-->3)开始初始化的时候没有硬币,然后新来了面值为1的硬币,接着又来了面值为2的硬币。。。。
    显然,每新增加一种面值的硬币,dp[]的值一定在增加。。。新的dp[] = 未新增前的dp[] + dp[1件新增硬币] + dp[2件新增硬币] + dp[3件新增硬币] +.......dp[k件新增硬币]

    由于for里用了完全背包里的顺序,for(j = c[i]; j <= n; j++),所以dp[j] += dp[j - c[i]];中的dp[j - c[i]]已经是有k件新增硬币的状态了。。。。。

    即j不停地向右,开始的时候得到只有一个新增硬币而组成n的总数,然后由只有1个新增硬币的结果得到只有2个新增硬币而组成n的总数,慢慢地,。。。。得到由越来越多件新增硬币组成n的总数得到的dp[i]就是该容量下的总数了

    上面的解释是复制来的,总之一句话:不停的更新的dp的值。
    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int n;
        int dp[32778];
        while(~scanf("%d",&n))
        {
            memset(dp,0,sizeof(dp));
            dp[0]=1;
            for(int i=1;i<=3;i++)
            {
                for(int j=i; j<=n; j++)
                {
                    dp[j] += dp[j - i];// printf("dp[%d]=%d 	",j,dp[j]);
                }//printf("
    ");
            }
            printf("%d
    ",dp[n]);
        }
        return 0;
    }
    


  • 相关阅读:
    今天又能去健身了
    今天招受情感打击
    js实现菜单命令
    爱好者
    杂七杂八
    wu
    后缀数组学习笔记——罗穗骞倍增算法代码
    POJ 3261 Milk Patterns
    URAL 1158 Censored!
    POJ 1743 Musical Theme
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160244.html
Copyright © 2011-2022 走看看