P1244 青蛙过河
NOI2000
主要思想:
数学归纳法 递推 压位高精度 化归
理解能力和找规律的能力
题意再述:
1.青蛙从上到下必须连续递增或者下面是石墩
而不能是
1 1
2 3
3 4
而且每时每刻都要满足这个条件
2.左岸和右岸都是石堆
公式推导过程:
k=0
h=0 s=1
h=1 s=2 _ _ _
h=2 s=?

当h=1时,共有三个石墩,空石墩有2个,我们可以转移2个青蛙到任意石墩
当h=2时,总石墩数比原来多1,空石墩有3个,我们可以先利用3个空石墩把上面2个小青蛙(1号和2号)移到一个非右岸的一个空石墩上,现在共有2个空石墩,由h=1时
(空石墩有2个,我们可以转移2个青蛙到任意石墩)
,我把下面两个大青蛙,移到右岸,再把,小青蛙移到右岸。完成。

假设当h=x,k=0时,空石墩有x+1个,最多能转移的青蛙数为(1<<x)
当h=x+1时,k=0,空石墩有x+2个,我们可以利用x+1个空石墩把(1<<x)个青蛙移到一个非右岸的一个空石墩上,现在有空石墩h+1个,我们用这x+1个空石墩将下面的(1<<x)个大青蛙移到右岸,现在还是有空石墩x+1个,再用这些把刚才的(1<<x)个小青蛙移到右岸。移动的青蛙总数是h=x时的两倍,故为
(1<<(x+1));
所以当k=0时,转移的青蛙数为(1<<h)

要是k>0呢?

我们知道,当k=0时,转移的青蛙数为(1<<h),单个青蛙可以直接移动,我们把(k+1)只青蛙压成一只青蛙,因为(k+1)只青蛙可以像一只青蛙一样直接移动,why?先把k只青蛙放到k个荷叶上,再把最下面的那只移到目标位置,再把荷叶上的k只青蛙移到最下面的那只上就可以不借助石墩实现(k+1)只青蛙的直接移动。
原来当k=0时,转移的青蛙数为(1<<h),现在把(k+1)只青蛙压成一只青蛙,所以总数为:
(1<<h)*(k+1)

结束了???
完美了???

但是这样只是证明了这种解的存在性,并没有证明最优性。有想法的和我继续讨论。

 #include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cstring>
#define inf 2147483647
#define For(i,a,b) for(register long long i=a;i<=b;i++)
#define p(a) putchar(a)
#define g() getchar()
//by war
//2017.10.19
using namespace std;
long long h,k;
void in(long long &x)
{
long long y=;
char c=g();x=;
while(c<''||c>'')
{
if(c=='-')
y=-;
c=g();
}
while(c<=''&&c>='')x=x*+c-'',c=g();
x*=y;
}
void o(long long x)
{
if(x<)
{
p('-');
x=-x;
}
if(x>)o(x/);
p(x%+'');
}
int main()
{
in(h),in(k);
cout<<((<<h)*(k+));
return ;
}

P1244 青蛙过河的更多相关文章

  1. 洛谷P1244 青蛙过河

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

  2. 洛谷 P1244 青蛙过河

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

  3. 洛谷P1244 青蛙过河 DP/思路

    又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的 ...

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

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

  5. [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 ...

  6. NOIP 2005 青蛙过河

    做题记录:2016-08-10 21:58:09 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都 ...

  7. ooj 1066 青蛙过河DP

    http://121.249.217.157/JudgeOnline/problem.php?id=1066 1066: 青蛙过河 时间限制: 1 Sec  内存限制: 64 MB提交: 58  解决 ...

  8. 趣味算法——青蛙过河(JAVA)

    青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...

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

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

随机推荐

  1. 洛谷 P2671 求和 解题报告

    P2671 求和 题目描述 一条狭长的纸带被均匀划分出了\(n\)个格子,格子编号从\(1\)到\(n\) .每个格子上都染了一种颜色\(color_i\)用\([1,m]\)当中的一个整数表示),并 ...

  2. 洛谷P3227 切糕

    最小割模板. 题意:你要在一个三维点阵的每个竖条中删去一个点,使得删去的点权和最小. 且相邻(四联通)的两竖条之间删的点的z坐标之差的绝对值不超过D. 解: 首先把这些都串起来,点边转化,就变成最小割 ...

  3. 《剑指offer》— JavaScript(34)第一个只出现一次的字符

    第一个只出现一次的字符 题目描述 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置. *** 思路 新建一个对象,其中key用 ...

  4. spring task 实现定时执行(补充:解决定时任务执行2次问题)

    首先在spring-mvc.xml配置头文件引入: xmlns:task="http://www.springframework.org/schema/task" 其次引入task ...

  5. 61. Rotate List(M);19. Remove Nth Node From End of List(M)

    61. Rotate List(M) Given a list, rotate the list to the right by k places, where k is non-negative. ...

  6. scrapy 让指定的spider执行指定的pipeline

    处理scrapy中包括多个pipeline时如何让spider执行制定的pipeline管道1:创建一个装饰器from scrapy.exceptions import DropItemimport ...

  7. 20181108 Apache Commons Lang

    工具类 org.apache.commons.lang3 AnnotationUtils ArchUtils ArrayUtils BooleanUtils CharSetUtils CharUtil ...

  8. Codeforces 314 E. Sereja and Squares

    http://codeforces.com/contest/314/problem/E 题意: 原本有一个合法的括号序列 擦去了所有的右括号和部分左括号 问有多少种填括号的方式使他仍然是合法的括号序列 ...

  9. Javascript - LayUI库的流加载

    LayUI库的流加载 用的LayUI-v2.2.45,将整个包解压缩后添加到项目,引入两个文件即可,不需要引入Jquery,此库自带: <link href="../js/layui- ...

  10. ACM数据对拍程序

    #include<cstdio> #include<cstdlib> #include<ctime> int main() { long s,t; while(1) ...