动态规划:HDU1248-钱币兑换问题
解题心得:
(青蛙跳台阶:有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
#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分,2分,3分硬币,将钱N兑换成硬币有很多种兑法.请你编程序计算出共有多少种兑法. Input 每行只有一个正整数N,N小于32768. Output 对应每个输入,输出 ...
- HDU 1284 钱币兑换问题 (动态规划 背包方案数)
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 钞票兑换java编程题,HDOJ 题目1284钱币兑换问题(动态规划,完全背包) | 学步园...
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 钱币兑换问题c语言编程,HDU 1284 钱币兑换问题
题目: 钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- HDU 1284 钱币兑换问题 (完全背包)
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU1284——钱币兑换问题【dp】
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- hdu1284经典钱币兑换问题
钱币兑换问题. 题目 http://acm.hdu.edu.cn/showproblem.php?pid=1284 完全背包. 这种是求背包问题最多的组合方案 参考了一些资料 http://blo ...
- hdu 1284 钱币兑换问题
hdu 1284 钱币兑换问题 母函数 //hdu 1284 母函数// 1分的 2分的 3分的 //母函数计算:(1+x+x^2+x^3+...)*(1+x^2+x^4+...)*(1+x^3+x^ ...
- 【算法】求解钱币兑换问题
求解钱币兑换问题 某个国家仅有1分.2分和5分硬币,将钱n(n≥5)兑换成硬币有很多种兑法.编写一 个实验程序计算出10分钱有多少种兑法,并列出每种兑换方式. #include<iostream ...
- hdu 1284钱币兑换问题
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
最新文章
- 快速深入一门语言的几个问题
- 安智armeabi 和 armeabi-v7a 的库文件增加法则
- 这边有本书:中国社会生存的必备常识(修订版)下载
- 【图像分割模型】编解码结构SegNet
- Jquery DataTable基本使用
- java InputStream的使用
- php 判断两个数组是否相等
- HDU 1301 - Jungle Roads( Prim求最小生成树 )
- 百度地图API的第一次接触——右键菜单
- 10款让你心动的 HTML5 CSS3 效果
- 转 @PathVariable是什么?详情及用法解析
- 黑苹果EFI|联想 Lenovo ideapad 320S-15IKB 笔记本电脑实战黑苹果
- HTML5-jqUI----EasyUI
- win10关闭触摸板自动开启
- GitHub 上这份计算机自学指南火了~
- MachineLearning 4. 癌症诊断方法之 K-邻近算法(KNN)
- 详解华夏银行iDo平台一体化运维的落地过程
- 世界标准时间(日期带T)转北京时间
- 【计算机组成原理】码距怎么计算
- Loki告警的正确姿势
热门文章
- Python operator.ge()函数与示例
- 台式机使用笔记本电脑上网解决办法。
- 高通平台android9.0充电电量,充电指示灯以及充电图标读取分析
- 《Python编程:从入门到实践》配套源代码下载
- 微服务Feign调用后开启Schedule报错No thread-bound request found: Are you referring to request attributes outsid
- 【Visual C++】游戏开发四十九 浅墨DirectX教程十七 三维天空的实现
- 在 Linux 平台及 IPv4 环境中构建 IPv6 测试环境
- 《玩透嵌入式C的角角落落》当你需要循环体至少执行一次时,选择do
- 播布客教学视频_C学习笔记_8.2_统计1到100中9的个数(函数)
- MySQL官方教程及各平台的安装教程和配置详解入口