题目描述

有一条河,左边一个石墩(A区)上有编号为1,2,3,4,…,n的n只青蛙,河中有k个荷叶(C区),还有h个石墩(D区),右边有一个石墩(B区),如下图2—5所示。n只青蛙要过河(从左岸石墩A到右岸石墩B),规则为:

(1)石墩上可以承受任意多只青蛙,荷叶只能承受一只青蛙(不论大小);
(2)青蛙可以:A→B(表示可以从A跳到B,下同),A→C,A→D,C→B,D→B,D→C,C→D;
(3)当一个石墩上有多只青蛙时,则上面的青蛙只能跳到比它大1号的青蛙上面。

你的任务是对于给出的h,k,计算并输出最多能有多少只青蛙可以根据以上规则顺利过河?

输入

一行两个整数h和k,分别表示k片荷叶和h个石墩

输出

输出最多能有多少只青蛙可以根据以上规则顺利过河

样例输入

2 3

样例输出

16
思路:递推(dp)

首先,青蛙只能往前跳,不能往后跳,而且只能12345这样排下去,所以要想使最多的青蛙到达对岸,只需使编号最大的青蛙首先跳到对岸(否则编号更大的青蛙就跳不过去了)。

然后,要想使编号最大的青蛙首先跳到对岸,只需让河面上承载最多的青蛙。而荷叶上只能承载一只青蛙,所以需要让青蛙尽可能多地叠到石墩上。

接下来便是核心内容:(f[i]表示当有k个荷叶,i个石墩时过河青蛙的最大数量)

1、若有k个荷叶,没有石墩,则最多有k+1个青蛙。所以f[0]=k+1(不需要解释了吧);

2、若有k个荷叶,1个石墩,则只需要使石墩上承载最多的青蛙。进一步分析,我们只需要将石墩当做对岸,这样就变成1的情况了。所以f[1]=f[0]+k+1;

3、若有k个荷叶,2个石墩,则需要先让石墩1作为对岸,叠完后再让石墩2作为对岸。所以f[2]=f[1]+f[0]+k+1;

继续往下推理,得到状态转移方程:f[h]=f[0]+f[1]+f[2]+……+f[h-1]+k+1;

代码:

 1 #include <iostream>
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 int n,m,sum;
 5 int a[10000];
 6 int main()
 7 {
 8     scanf("%d%d",&n,&m);
 9     a[0]=m+1;
10     sum=a[0];
11     for(int i=1;i<=n;i++)
12     {
13         a[i]=sum;
14         sum+=a[i];
15     }
16     cout << sum << endl;
17     return 0;
18 }

View Code

转载于:https://www.cnblogs.com/SoulSecret/p/8447457.html

【递归与递推】青蛙过河相关推荐

  1. 贪心、递归、递推以及动态规划算法的分析与对比

    PS:   头一次规规矩矩的按照论文的格式写文章,呵呵.虽然是小儿科的不能再小儿科的东西了..不过..也忽悠了6000多字~~嘿嘿..肯定写的不好,第一次嘛..所以..接受大家一切批评哈!...文章N ...

  2. 递归与递推 普通排队问题及带约束条件的排队问题 c代码

    先看下题目: 电影院买票排队,票价50,排队的人中携带50元的有20个人,携带100的有10个人,售票处开始时没有余额, 问最多有多少种排队方式使得售票处能够找的开(携带相同数额的人交换位置算一种排队 ...

  3. 2.3 基本算法之递归变递推 1188 菲波那契数列(2) python

    http://noi.openjudge.cn/ch0203/1760/ """2.3 基本算法之递归变递推 1188 菲波那契数列(2)--3分 http://ybt. ...

  4. 2.3基本算法之递归变递推 1188 菲波那契数列(2)

    http://noi.openjudge.cn/ch0203/1760/ /* 2.3基本算法之递归变递推 1188 菲波那契数列(2) http://ybt.ssoier.cn:8088/probl ...

  5. 2.3 基本算法之递归变递推 放苹果 python

    http://noi.openjudge.cn/ch0203/666/ """ 2.3 基本算法之递归变递推 666 放苹果 http://noi.openjudge.c ...

  6. 2.3基本算法之递归变递推_3525上台阶

    http://ybt.ssoier.cn:8088/problem_show.php?pid=1190 /* 2.3基本算法之递归变递推_3525上台阶 http://noi.openjudge.cn ...

  7. 2.3基本算法之递归变递推_3525上台阶 python

    http://ybt.ssoier.cn:8088/problem_show.php?pid=1190 """ 2.3基本算法之递归变递推_3525上台阶 http:// ...

  8. 递归,递推,记忆化搜索,空间优化(数字三角形)

    题目链接:http://poj.org/problem?id=1163 1.递归思想:第一层到最底层的最优路径可以分解为:第一层到第二层来,再加上第二层的最优路径 状态: Time Limit Exc ...

  9. c语言中用递推法解决渔夫问题,递归、递推 - IT小冰的个人空间 - OSCHINA - 中文开源技术交流社区...

    递归 定义 :定义一个函数时出现调用本函数的成分,称之为递归 直接递归,自己调自己 间接递归,函数p调函数q,q又调用p 尾递归,递归函数中,递归调用语句是最后一句 递归应满足的条件 : 需要解决的问 ...

  10. PHP 递归和递推思想

    递归思想(递归函数): 递归思想的一个基本形式是在一个函数中,有至少一条语句,又会去调用该函数自身.(求n!问题用递归:杨辉三角问题用过递归-) <?phpfuntion digui($n){i ...

最新文章

  1. IDEA配置NodeJS项目遇到问题及解决
  2. 积木赛尔号机器人_《赛尔号大电影7》2019年暑期重磅回归 继《熊出没》之后再掀国产动画浪潮...
  3. C语言 某班级有30名学生,要求从键盘输入每个学生的数学课程成绩(百分制),并进行以下处理
  4. 更方便地模拟 Http 响应
  5. 华为云占用443端口_关于XAMPP默认端口80和443被占用的问题
  6. js设计模式——8.中介者模式
  7. 两种方式设置单元格的下划线
  8. win7 与xp 互联步骤
  9. webSphere 配置
  10. 使用计算机过程中 你有哪些有效措施防范计算机病毒,计算机病毒防范措施主要有什么...
  11. Python实现数列求和
  12. Solidity简单例子-代理投票
  13. 前端架构师的YY定义
  14. MOBA类和“吃鸡”游戏为什么对网络延迟要求高?
  15. 液晶显示器汉字字模存储及显示
  16. 【C++】算法STL库
  17. 内核I2C子系统详解
  18. mysql运动会报名系统_运动会报名系统的简易实现
  19. Error:1045, Access denied for user 'root'@'localhost' (using password: YES) (Phon3.6+Mysql8.1 )
  20. C++ 堆区,栈区,数据段,bss段,代码区(详解)

热门文章

  1. Jackson高级操作————流式API与JsonGenerator、JsonParser
  2. 彭山计算机培训,彭山2021年初中生学计算机
  3. 药学专业报计算机一级有用吗,全网友泣泪劝阻!高考结束之后,什么专业千万不能报?...
  4. 西电计算机学院导师苗启广,Xidian Media Lab
  5. cp命令显示进度条_干货|| Linux常用命令大全
  6. c语言将字符串按空格分割_字符串单词输入反向输出怎么搞?C语言又带着二维数组来了!...
  7. android无法自动旋屏,Android 手动设置屏幕方向后不能自动转屏问题
  8. linux启动管理,Linux启动管理 详述
  9. C语言数据类型转换详解
  10. python里面的函数