猴子摘香蕉问题python_硬币找零爬楼梯猴子摘香蕉
硬币找零&&爬楼梯&&猴子摘香蕉
假设有几种硬币,如1、3、5,并且数量无限。请找出能够组成某个数目的找零所使用最少的硬币数。
#include"CoinProblem.h"
#include
intcountNum=MAX;
voidCoinProblem(int*coin,intLength,intValue,intcount){
if(Value==0){
if(countNum>count){
countNum=count;
}
return;
}
for(inti=0;i
if(Value>=coin[i]){
CoinProblem(coin,Length,Value-coin[i],count+1);
}
}
}
#ifndefCOIN_PROBLEM_H
#defineCOIN_PROBLEM_H
#defineMAX65535
externintcountNum;
voidCoinProblem(int*coin,intLength,intValue,intcount);
#endif
#include"CoinProblem.h"
#include
intmain(){
intcoin[3]={1,3,5};
CoinProblem(coin,3,5,0);
std::cout<
}
这些问题都是一类问题,你猴子摘香蕉、硬币找零、爬楼梯等。
这类问题的共同点就是你要问题解决问题,也就是说你要恰好把问是不多不少地解决,不管你怎么摘香蕉,不管你一次
是摘几个,你得把香蕉摘完。你得恰好找别人那么钱,不能多也不能少。爬楼梯也一样啰。。反下是解决问题。
这个不像背包问题,因为背包是不一定能装满的,也就是结束条件是不确定的。
但是我们不要管是不是恰好,因为我们采用了梯归。因为递归的好处是把所有能考虑的问题都考虑了,包括恰好解决问题和
把问题所要求的多,或者少。。
if(Value==0){
if(countNum>count){
countNum=count;
}
return;
}
如上面的代码就是专门用来限制结束条件的,只有当我们找的钱恰好是那么多是,我们才会计数。
于是我们可能通过自己的限定条件来限制要计数的情况。
特注意的是:
由于我自己的疏忽,导致在以前写这些代码的时候出了些小问题,以前我是这样写的
voidCoinProblem(int*coin,intLength,intValue,intcount){
if(Value==0){
if(countNum>count){
countNum=count;
}
return;
}
for(inti=0;i
if(Value>=coin[i]){
CoinProblem(coin,Length,Value-coin[i],++count);
}
}
}
看代码中红色的部分,这里成了++count,这里是改变了count的值,我这意思是改变了在这一次递归运算中的所有count的值,也就是说,i=0时
如count=2,同时也符合条件,也就是说进入那个条件判断语句,于是用++count时会发现count变成了3,这确实是我们所期望的,但是
如果下一次“归”回来后,i=1时,那时发现count一开始就是3了。不再是我们期望的2了。
于是正确的写法应该是这样:
voidCoinProblem(int*coin,intLength,intValue,intcount){
if(Value==0){
if(countNum>count){
countNum=count;
}
return;
}
for(inti=0;i
if(Value>=coin[i]){
CoinProblem(coin,Length,Value-coin[i],count+1);
}
}
}
猴子摘香蕉问题python_硬币找零爬楼梯猴子摘香蕉相关推荐
- java动态规划凑硬币问题,详解动态规划最少硬币找零问题--JavaScript实现
硬币找零问题是动态规划的一个经典问题,其中最少硬币找零是一个变种,本篇将参照上一篇01背包问题的解题思路,来详细讲解一下最少硬币找零问题.如果你需要查看上一篇,可以点击下面链接: 详解动态规划01背包 ...
- 动态规划——硬币找零和币值最大化问题
一.硬币找零问题 1.问题 有面值为1元.3元和5元的硬币若干枚,给定一个输入面额,问如何采用最少的硬币数目,得到当前面额 2.思路 找出状态转移方程,每次可以拿取1元.3元或者5元的硬币,每次拿取, ...
- C++coin change 硬币找零(附完整源码)
coin change 硬币找零 coin change 硬币找零算法的完整源码(定义,实现,main函数测试) coin change 硬币找零算法的完整源码(定义,实现,main函数测试) #in ...
- 贪心算法-01硬币找零问题
硬币找零问题 前言 所谓贪心算法,就是遵循某种既定原则,不断选取当前条件下最优的选择来构造每一个子步骤的解决方案,直到获得问题最终的求解.即在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不 ...
- 动态规划——硬币找零思路
找零的两种问题 硬币找零问题,有两种.一种用贪心解决,一种用动态规划解决. 问题1:假设我们有 v1,v2,--,vn(单位是元)这些币值的硬币,它们的张数分别是 c1.c2.-, cn.我们现在要用 ...
- 硬币找零问题,动态规划基础,百度面试题
问题描述:给出几种面值的硬币,要求用这几种硬币找零出所给零钱数,用的硬币数要最少. 过去我们用过贪心法解决此类问题,包括本人在百度面试时,也是用的贪心法(面试官对这个解答不满意),贪心法只适用于硬币特 ...
- 最少硬币找零系列问题(01背包,完全背包,多重背包动态规划)
背包问题思路解决最小硬币找零系列问题. 一.01硬币找零问题(01背包) 给定不同面额的硬币 coins 和总金额 m.每个硬币最多选择一次.计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬 ...
- 硬币找零 acm入门 day4--动态规划dp第一题
A - 硬币找零 在现实生活中,我们经常遇到硬币找零的问题,例如,在发工资时,财务人员就需要计算最少的找零硬币数,以便他们能从银行拿回最少的硬币数,并保证能用这些硬币发工资.我们应该注意到,人民币的硬 ...
- nyoj995硬币找零(dp)
硬币找零 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 3 描述 在现实生活中,我们经常遇到硬币找零的问题,例如,在发工资时,财务人员就需要计 算最少的找零硬币数,以便他们 ...
最新文章
- AI口语翻译,遇到的可不止口齿不清…….
- 监控j服务器jvm运行情况 - spring boot jvisualvm
- 怪自己,好好的服务器,装啥播放器。。。
- C语言:函数中参数的传值与传地址
- Axure实现多用户注册验证
- python实现端口转发_Python TCP/IP协议下实现端口转发及重定向菜鸟教程
- Leetcode每日一题:1370.increasing-decreasing-string(上升下降字符串)
- zynq跑linux所需内存大小,Zynq-Linux移植学习笔记之33-CMA连续物理内存配置
- ajax返回的java list_ssm+ajax异步请求返回list遍历
- hadoop namenode启动失败
- 基于RV1126平台imx291分析 --- mipi-csi-phy注册
- 计算机网络共享无访问权限,Win7局域网访问WIN7共享文件夹提示无访问权限的多种解决方法...
- 巨人肩膀—arduino
- 音响无声或声音不正常的原因有哪些?
- 仅需简单的文字描述,即可把文字转图片
- MySQL【触发器】
- 单片机——LCD1602
- Web自动化测试(Selenium自动化测试框架)
- python自己做课程表_Python 大学生课表 iCalendar (.ics) 生成
- 基于R的FP树fp growth 关联数据挖掘技术在煤矿隐患管理
热门文章
- Eth 03 -以太网驱动Eth的配置
- 一键满速下载各种单机/网络游戏
- python求向量函数的雅可比矩阵_python – scipy中最小二乘函数的雅可比行列式的方法签名...
- 倩女幽魂手游服务器维护多久,倩女手游维护到几点 倩女幽魂要维护到几点看系...
- mimikatz使用以及源码动态分析
- Xcafe:Netty实现兼容SpringMVC的Web容器
- C++常见十六进制数组转换char数组方法
- 使用java代码查询本机ip地址
- 电脑XP系统蓝屏修理记录
- FatMouse的奶酪