解题心得:

(青蛙跳台阶:有n阶台阶,青蛙可以一次跳一阶也可以一次跳两阶,问总共有多好中跳法)

1、之前把这个问题的思路弄错了,以为是递推,就像青蛙跳台阶,用斐波那契求解。但是用斐波那契肯定会超范围。反过来想自己的思路其实是错的。青蛙跳台阶其实要区分顺序,比如三级台阶,先跳两级再跳一级和先跳两级再跳一级是两种不同的方法,但是钱币问题两分和一分都可以凑成三分钱但是不分先后顺序。

2、凑硬币有三种算法,先说第一种。第一种就是完全背包问题,动态规划,一元的只有一种凑法,全是一元的,然后规划二元的,将两个一元的可以用一个一元的代换,所以可以代换一个一元的就多一种凑法,因为可以选择替换或者不替换,再逐步扩大钱数就可以了,三元的同上。

3、第二种算法,和第一种比较相似,只不过先是凑的三元的,所以先看可以凑多少个三元的,n/3种不够的直接用一来填补就行了,n/3+1,+1部分就是全用一元的来组成的情况。然后就是逐步减去i个三元用二元来代替,思想方法同第二种,加起来就行了

题目

钱币兑换问题

http://acm.hdu.edu.cn/showproblem.php?pid=1284

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

Problem Description
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
Input
每行只有一个正整数N,N小于32768。
Output
对应每个输入,输出兑换方法数。
Sample Input
2934
12553
Sample Output
718831
13137761
Author
SmallBeer(CML)
Source
杭电ACM集训队训练赛(VII)
方法一:
#include<stdio.h>
#include<cstring>
long long num[32770];
int main()
{memset(num,0,sizeof(num));num[0] = 1;for(int i=1;i<=3;i++)for(int j=i;j<=32768;j++)num[j] += num[j-i];int n;while(~scanf("%d",&n)){printf("%lld\n",num[n]);}
}
方法二:
#include<bits/stdc++.h>
using namespace std;
int main()
{int n;while(~scanf("%d",&n)){long long sum = 0;sum = n/3 + 1;for(int i=0;i<=n/3;i++){int t = (n-i*3)/2;sum += t;}printf("%lld\n",sum);}
}
方法三:(母函数)
#include<bits/stdc++.h>
using namespace std;
int main()
{int c1[32770],c2[32770];int n;for(int i=0;i<=32768;i++){c1[i] = 1;c2[i] = 0;}for(int i=2;i<=3;i++){for(int j=0;j<=32768;j++){for(int k=0;k+j<=32768;k+=i){c2[k+j] +=  c1[j];}}for(int k=0;k<=32768;k++){c1[k] = c2[k];c2[k] = 0;}}while(~scanf("%d",&n)){printf("%d\n",c1[n]);}
}














动态规划:HDU1248-钱币兑换问题相关推荐

  1. 动态规划之钱币兑换问题

    钱币兑换问题 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法.请你编程序计算出共有多少种兑法. Input 每行只有一个正整数N,N小于32768. Output 对应每个输入,输出 ...

  2. HDU 1284 钱币兑换问题 (动态规划 背包方案数)

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  3. 钞票兑换java编程题,HDOJ 题目1284钱币兑换问题(动态规划,完全背包) | 学步园...

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  4. 钱币兑换问题c语言编程,HDU 1284 钱币兑换问题

    题目: 钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  5. HDU 1284 钱币兑换问题 (完全背包)

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  6. HDU1284——钱币兑换问题【dp】

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. hdu1284经典钱币兑换问题

    钱币兑换问题. 题目 http://acm.hdu.edu.cn/showproblem.php?pid=1284 完全背包. 这种是求背包问题最多的组合方案 参考了一些资料   http://blo ...

  8. hdu 1284 钱币兑换问题

    hdu 1284 钱币兑换问题 母函数 //hdu 1284 母函数// 1分的 2分的 3分的 //母函数计算:(1+x+x^2+x^3+...)*(1+x^2+x^4+...)*(1+x^3+x^ ...

  9. 【算法】求解钱币兑换问题

    求解钱币兑换问题 某个国家仅有1分.2分和5分硬币,将钱n(n≥5)兑换成硬币有很多种兑法.编写一 个实验程序计算出10分钱有多少种兑法,并列出每种兑换方式. #include<iostream ...

  10. hdu 1284钱币兑换问题

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

最新文章

  1. 快速深入一门语言的几个问题
  2. 安智armeabi 和 armeabi-v7a 的库文件增加法则
  3. 这边有本书:中国社会生存的必备常识(修订版)下载
  4. 【图像分割模型】编解码结构SegNet
  5. Jquery DataTable基本使用
  6. java InputStream的使用
  7. php 判断两个数组是否相等
  8. HDU 1301 - Jungle Roads( Prim求最小生成树 )
  9. 百度地图API的第一次接触——右键菜单
  10. 10款让你心动的 HTML5 CSS3 效果
  11. 转 @PathVariable是什么?详情及用法解析
  12. 黑苹果EFI|联想 Lenovo ideapad 320S-15IKB 笔记本电脑实战黑苹果
  13. HTML5-jqUI----EasyUI
  14. win10关闭触摸板自动开启
  15. GitHub 上这份计算机自学指南火了~
  16. MachineLearning 4. 癌症诊断方法之 K-邻近算法(KNN)
  17. 详解华夏银行iDo平台一体化运维的落地过程
  18. 世界标准时间(日期带T)转北京时间
  19. 【计算机组成原理】码距怎么计算
  20. Loki告警的正确姿势

热门文章

  1. Python operator.ge()函数与示例
  2. 台式机使用笔记本电脑上网解决办法。
  3. 高通平台android9.0充电电量,充电指示灯以及充电图标读取分析
  4. 《Python编程:从入门到实践》配套源代码下载
  5. 微服务Feign调用后开启Schedule报错No thread-bound request found: Are you referring to request attributes outsid
  6. 【Visual C++】游戏开发四十九 浅墨DirectX教程十七 三维天空的实现
  7. 在 Linux 平台及 IPv4 环境中构建 IPv6 测试环境
  8. 《玩透嵌入式C的角角落落》当你需要循环体至少执行一次时,选择do
  9. 播布客教学视频_C学习笔记_8.2_统计1到100中9的个数(函数)
  10. MySQL官方教程及各平台的安装教程和配置详解入口