也许更好的阅读体验

\(\mathcal{Description}\)

原题链接:

Comet OJ

洛谷

大小各不相同的一队青蛙站在河左岸的石墩(记为A)上,要过到对岸的石墩(记为D)上去。河心有几片菏叶(分别记为\(Y1​…Ym​)\)和几个石墩(分别记为\(S1…Sn)\)。图示如下:

青蛙的站队和移动方法规则如下:

每只青蛙只能站在荷叶、石墩,或者仅比它大一号的青蛙背上(统称为合法的落脚点);

一只青蛙只有背上没有其它青蛙的时候才能够从一个落脚点跳到另一个落脚点;

青蛙允许从左岸A直接跳到河心的石墩、荷叶和右岸的石墩D上,允许从河心的石墩和荷叶跳到右岸的石墩D上;

青蛙在河心的石墩之间、荷叶之间以及石墩和荷叶之间可以来回跳动;

青蛙在离开左岸石墩后,不能再返回左岸;到达右岸后,不能再跳回;

假定石墩承重能力很大,允许无论多少只青蛙都可呆在上面。但是,由于石墩的面积不大,至多只能有一只青蛙直接站在上面,而其他的青蛙只能依规则1落在比它大一号的青蛙的背上。

荷叶不仅面积不大,而且负重能力也有限,至多只能有一只青蛙站在上面。

每一步只能移动一只青蛙,并且移动后需要满足站队规则;

在一开始的时候,青蛙均站在A上,最大的一只青蛙直接站在石墩上,而其它的青蛙依规则6站在比其大一号的青蛙的背上。

青蛙希望最终能够全部移动到D上,并完成站队。

设河心有\(m\)片荷叶和\(n\)个石墩,请求出这队青蛙至多有多少只,在满足站队和移动规则的前提下,能从A过到D。

例如,在m=1且 n=1时,河心有一片荷叶\((Y1​)\)和一个石墩\((S1​)\),此时至多有\(4\)只青蛙能够过河(由小到大称为\(1、2、3、4)\),过河的一种方法为:

此例中,当河心有一片荷叶和一个石墩时,4只青蛙能够跳动9步过河。

输入描述

仅有两行,每一行仅包含一个整数和一个换行/回车符。第一行的数字为河心的石墩数\(n(0≤n≤25)\),第二行为荷叶数\(m(0≤m≤25)\)。

输出描述

仅包含一个数字和一个换行/回车符。该数字为在河心有\(n\)个石墩和\(m\)片荷叶时,最多能够过河的青蛙的只数。

\(\mathcal{Solution}\)

简单来说就是在石墩上青蛙可以类似\(Hanoi\)问题\((汉诺塔)\)地叠着

我们想叠得越多越好,显然我们既然有办法把它叠起来,用叠的逆过程就可以把它们全部合法的放到河对岸

所以我们只要考虑如何叠

设有\(n\)片荷叶,\(k\)个石墩

若\(k=0\),那么我们在每片荷叶上放一只青蛙,然后从岸上直接跳到对面一只青蛙,可以有\(n+1\)只青蛙过岸

若\(k=1\),那么我们可以在这个石墩上叠\(n+1\)只青蛙,然后就又变为\(k=0\)的情况

类似地,每多一个石墩就可以利用原来的\(k-1\)个石墩把它们的青蛙全部放到这上面来,这样就增加了一倍的青蛙可以过岸

换个想法,我们可以将每个石墩当成对岸的石墩,然后我们就先直接跳一个青蛙上来,再把当前的青蛙\(f_{k-1}-1\)全部转移到这个石墩上面,然后原来的石墩就都空了,于是可以再把原来石墩上再放\(f_{k-1}-1\),这样最后能过岸的就多了一倍

也就是有\((n+1)*2^{k}\)可以过河

\(\mathcal{Code}\)

/*******************************
Author:Morning_Glory
LANG:C++
Created Time:2019年08月27日 星期二 14时58分07秒
*******************************/
#include <cstdio>
#include <fstream>
#define ll long long
using namespace std;
ll n,k;
int main()
{
scanf("%lld%lld",&n,&k);
printf("%lld\n",(k+1)*(1<<n));
return 0;
}

如有哪里讲得不是很明白或是有错误,欢迎指正

如您喜欢的话不妨点个赞收藏一下吧

NOI2000 青蛙过河[递推]的更多相关文章

  1. 洛谷P1244 [NOI2000] 青蛙过河 [2017年4月计划 动态规划07]

    P1244 青蛙过河 题目描述 有一条河,左边一个石墩(A区)上有编号为1,2,3,4,…,n的n只青蛙,河中有k个荷叶(C区),还有h个石墩(D区),右边有一个石墩(B区),如下图所示.n只青蛙要过 ...

  2. 【openjudge】【递推】例3.6 过河卒(Noip2002)

    [题目描述] 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1 ...

  3. P1002 过河卒 【递推、简单动规】

    题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒 ...

  4. 一只青蛙从第一级台阶跳到第n级,每次可以跳任意级,共有多少种跳法,并写出递推式

    是斐波那契数列问题 假设f(n)是n个台阶跳的次数:(假设已经调到第n个台阶,最后一次是由哪个台阶跳上来的) f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) ...

  5. P1244 青蛙过河

    P1244 青蛙过河NOI2000主要思想:数学归纳法 递推 压位高精度 化归 理解能力和找规律的能力题意再述:1.青蛙从上到下必须连续递增或者下面是石墩 而不能是1 12 33 4而且每时每刻都要满 ...

  6. HRBUST 1186 青蛙过河 (思路错了)

    在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串 ...

  7. 洛谷P1244 青蛙过河

    P1244 青蛙过河 362通过 525提交 题目提供者该用户不存在 标签 难度普及- 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 题目什么意思 题目看不懂啊 题目描述 有一条河 ...

  8. 洛谷 P1244 青蛙过河

    P1244 青蛙过河 题目描述 有一条河,左边一个石墩(A区)上有编号为1,2,3,4,…,n的n只青蛙,河中有k个荷叶(C区),还有h个石墩(D区),右边有一个石墩(B区),如下图所示.n只青蛙要过 ...

  9. [LeetCode] Frog Jump 青蛙过河

    A frog is crossing a river. The river is divided into x units and at each unit there may or may not ...

随机推荐

  1. useMemo优化React Hooks程序性能(九)

    useMemo主要用来解决使用React hooks产生的无用渲染的性能问题.使用function的形式来声明组件,失去了shouldCompnentUpdate(在组件更新之前)这个生命周期,也就是 ...

  2. pdf 中内容的坐标系

    PDF Page Coordinates (page size, field placement, etc.) AcroForm, Basics, Automation Page coordinate ...

  3. vue-使用keepAlive对上下拉刷新列表数据 和 滚动位置细节进行处理

    [前言] 使用vue处理项目中遇到列表页面时,有一些细节需要注意,这里总结一下,以便优化以后的代码.如下: 1. 使用mint-ui中的LoadMore组件上下拉刷新时,有时无法触发上拉加载更多的方法 ...

  4. Docs-.NET-C#-指南-语言参考-关键字-值类型:内置数值转换

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:内置数值转换 1.返回顶部 1. 内置数值转换(C# 参考) 2019/10/22 C# 提供了一组整型和浮点数值类型. 任何 ...

  5. opencv3.4.6 cmake

    Selecting Windows SDK version to target Windows 10.0.16299. Found PythonInterp: N:/Anaconda3/install ...

  6. osg gis编译日志

    1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake do ...

  7. idea的一些常用快捷键

    快捷键 1.进入实现方法的快捷键 Ctrl + Alt + B Ctrl + Alt + 鼠标点击 2.自动给方法添加注释的快捷键 输入/**,然后回车 3.删除一行 CTRL + Y / CTRL ...

  8. aar api 导出

    import fsys; import math; var pidMap = {}; math.randomize(); fsys.enum( "~\lib", "*.* ...

  9. SQL查询优化 LEFT JOIN和INNER JOIN

    作者:VerySky 推荐:陈敬(Cathy) SQL查询优化 LEFT JOIN和INNER JOIN 1,连接了八个数据库表,而且全部使用LEFT JOIN,如下所示: Resource_Reso ...

  10. php环境选择

    第一个    PHPStudy 推荐这个.简单好用. 链接:https://pan.baidu.com/s/1yWRDjfnadkkUE-JX5pqZmg 提取码:4imw 第二个 PHPnow 第三 ...