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

    点击打开链接

    //dp(完全背包)
    #include <stdio.h>
    #include <string.h>
    #define N 35000
    int dp[N];
    int main()
    {
        dp[0] = 1;
        for(int i = 1; i <= 3; ++i)
        {   //背包容量为N,装入质量为i 的物品
            for(int j = i; j < N; ++j)
            {
                dp[j] += dp[j-i];
            }
        }
        int n;
        while(scanf("%d", &n) != EOF)
            printf("%d\n", dp[n]);
        return 0;
    }
    //hdu 1284 找规律 
    //给出n 看能n 内有多少个 2 和多少个3 
    //具体看代码和一下注视
    #include<stdio.h> 
    #include <string.h> 
    #define N 35000
    __int64 ans[N];
    int main()
    { 
    	int n; // 计算i 可以由多少个 2 组成 
    	for(int i = 0; i < N; ++i)
    		// 后面的 +1 表示全由1组成的(只有1中情况)
    		ans[i] = i / 2 + 1; 
    	//则这一行表示由 2组成的情况加上由1组成的情况 
    	// 从前面往后推,看能由几个3 组成,比如 ans[3]表示钱为3时 
    	// 由1,2分硬币组成的情况,可以表示成钱为0 时加上一个3分硬币(这时方法数为
    	// 钱为 0 时由1,2,3组成的情况 加上钱为3时由1,2组成的方法数)
    	// 因此 ans[i] += ans[i-3]+1;不需要后面的+1 
    	for(int i = 3; i < N; ++i) ans[i] += ans[i-3];
    	//这一行ans[i]就表示由2组成的情况加上由3组成的情况 
    	// ans[6]就相当于由2组成的情况ans[6] 加上 由1,2,3组成的情况的ans[6-3] 
    	// 这样往后推,就可以把 由3分组成的情况加上去 
    	while(scanf("%d", &n) != EOF) 
    		printf("%I64d\n", ans[n]);
    	return 0; 
    }

    
    

    
    

  • 相关阅读:
    Ubuntu18下解决和IDEA快捷键冲突
    SM.SM图床踩坑记录
    springboot热部署
    springboot创建项目报错
    三次握手,四次挥手(转载)
    slf4j和log4j2整合报错,绑定失败
    Linux终端光标消失解决
    ssh免密登录
    Spring中编写单元测试
    用js模拟查询方法 hide() filter(":contains('"
  • 原文地址:https://www.cnblogs.com/yyf573462811/p/6365175.html
Copyright © 2011-2022 走看看