Chernobyl’ Eagle on a Roof(鹰蛋坚固度)
链接
题意
引用论文题意:有一堆共 M 个鹰蛋,一位教授想研究这些鹰蛋的坚硬度 E。他是通过不断从一幢 N 层的楼上向下扔鹰蛋来确定 E 的。当鹰蛋从第 E 层楼及以下楼层落下时是不会碎的,但从第(E+1)层楼及以上楼层向下落时会摔碎。如果鹰蛋未摔碎,还可以继续使用;但如果鹰蛋全碎了却仍未确定 E,这显然是一个失败的实验。教授希望实验是成功的。
例如:若鹰蛋从第 1 层楼落下即摔碎,E=0;若鹰蛋从第 N 层楼落下仍未碎,E=N。这里假设所有的鹰蛋都具有相同的坚硬度。给定鹰蛋个数 M 与楼层数 N。
要求最坏情况下确定 E 所需要的最少次数。
做法
论文里用了5种方法,这里不如我们就介绍最优的那种。
定义dp(i,j),表示第i个蛋尝试j次在最坏情况下能确定E的最高楼层数,
每一个蛋一次只能确定一层楼,所以把dp(i,1)初始化为1,假设蛋没碎,每一个蛋最坏情况要扔i次才能确定层数,所以把dp(1,i)初始化为i。
然后状态转移是这样:假设在某一层楼扔下一只蛋,且碎了,则在下面的(j-1)次里,我们要用(i-1)个蛋在下面的楼层中确定 E。为了使 dp(i,j)达到最大,我们当然希望下面的楼层数达到最多,这便是一个子问题,答案为 dp(i-1,j-1);假设蛋没碎,则在后面(j-1)次里,我们要用 i 个蛋在上面的楼层中确定 E,这同样需要楼层数达到最多,便为 dp(i-1,j),然后不管怎样,我们都用了一次。即dp(i,j)=dp(i-1,j-1)+dp(i,j-1)+1。建立新的动态规划模型,从另一个角度重新审视问题,可以更快解决一些dp问题。

代码
#include<bits/stdc++.h>
using namespace std;
#define LL long long
LL dp[1010][1010];
int main() {
for(int i = 1; i <= 1000; i++) {
dp[1][i] = i;//一个蛋试i次最坏情况可在i层确定E
dp[i][1] = 1;//一个蛋一次只能确定一层楼
}
for(int i = 2; i <= 1000; i++) {
for(int j = 2; j <= 1000; j++) {
dp[i][j] = dp[i][j - 1] + dp[i - 1][j - 1] + 1;
}
}
int n, m;//m 蛋,n 楼层
while(cin >> m >> n, n && m) {
LL ans = -1;
for(int i = 1; i <= 1000; i++) {
if(dp[m][i] >= n) {
ans = i;
break;
}
}
if(ans == -1)
puts("Impossible");
else
cout << ans << endl;
}
return 0;
}
Chernobyl’ Eagle on a Roof(鹰蛋坚固度)的更多相关文章
- 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof
题目传送门 /* 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + ...
- 1223. Chernobyl’ Eagle on a Roof(dp)&&poj3783
经典DP n个鹰蛋 m层楼 刚开始是二分想法 不过当数小于二分的那个值 貌似没发判断 dp[i][j] = min(dp[i][j],max(dp[i-1][k-1],dp[i][j-k]) 选择第k ...
- URAL 1223. Chernobyl’ Eagle on a Roof
题目链接 以前做过的一题,URAL数据强点,优化了一下. #include <iostream> #include <cstdio> #include <cstring& ...
- What number should I guess next ?——由《鹰蛋》一题引发的思考
What number should I guess next ? 这篇文章的灵感来源于最近技术部的团建与著名的DP优化<鹰蛋>.记得在一个月前,查到鹰蛋的题解前,我在与同学讨论时,一直试 ...
- 高楼扔鸡蛋问题(鹰蛋问题) POJ-3783
这是一道经典的DP模板题. https://vjudge.net/problem/POJ-3783#author=Herlo 一开始也是不知道咋写,尝试找了很多博客,感觉有点领悟之后写下自己的理解. ...
- LeetCode887鸡蛋掉落——dp
题目 题目链接 你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑.每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去,如果没有碎可以继续使用.你知道存在楼层 F , ...
- URAL DP第一发
列表: URAL 1225 Flags URAL 1009 K-based Numbers URAL 1119 Metro URAL 1146 Maximum Sum URAL 1203 Scient ...
- ural 1222. Chernobyl’ Eagles
1222. Chernobyl’ Eagles Time limit: 1.0 secondMemory limit: 64 MB A Chernobyl’ eagle has several hea ...
- noip模拟题题解集
最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定 ...
随机推荐
- 继续聊WPF——自定义滚动条
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winf ...
- C#学习笔记_02_数据类型
02_数据类型 基本数据类型 整型 有符号整型:最高位是正负号 字节型:sbyte 1byte:[-128,127] 短整型:short: 2byte:[-2^(位数-1),2^(位数-1)-1] 整 ...
- java获取文件的父目录
File file = new File("a.txt"); String parentPath = file.getParent(); // null File parentDi ...
- 【习题 4-4 UVA - 253】Cube painting
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 绕(x,y,z)三个轴旋转. 枚举x,y,z各4次的结果. (4次之后能还原.可以方便上一层枚举下一个情况.) [代码] #incl ...
- WEB测试范围小结
根据<用户需求说明手册>和<需求分析说明书>,分析各个功能模块.针对各个功能模块进行相关功能的测试. 链接测试 链接是Web 网站的一个主要特征,它是在页面之间切换和引导用户去 ...
- javascript的函数、创建对象、封装、属性和方法、继承
转自原文javascript的函数.创建对象.封装.属性和方法.继承 一,function 从一开始接触到js就感觉好灵活,每个人的写法都不一样,比如一个function就有N种写法 如:functi ...
- Java异常的处理机制(二)
1.throw的作用 class Usre { private int age; public void setAge (int age) { if(age < 0) { RuntimeExce ...
- 设计模式C++实现——组合模式
模式定义: 组合模式同意你将对象组合成树形结构来表现"总体/部分"层次结构.组合能让客户以一致的方式处理个别对象以及对象组合. 这个模式可以创建一个树形结构,在同一个结构中处理嵌套 ...
- Mule ESB-3.Build a webservice proxy
自从引入ESB后,系统之间不再直接依赖.我负责的这块,主要是解决Webservice的问题.使系统A不再直接依赖系统B的Webservice. 我们选择的产品是Mule ESB.所以自然要使用Mule ...
- C C++每个头文件的功能说
C/C++每个头文件的功能说明 传统 C++ #include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include &l ...