链接

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;
}

相关论文:《从《鹰蛋》一题浅析对动态规划算法的优化》

最新文章

  1. Linux系统NFS网络文件系统
  2. BNUOJ 51279[组队活动 Large](cdq分治+FFT)
  3. 8-IO总结
  4. Linux安装SmartSVN及破解
  5. wp8 入门到精通 LINQ to SQL
  6. 开源top100
  7. Handoff使用指南 - 理论篇
  8. iOS: 学习笔记, 值与引用类型(译自: https://developer.apple.com/swift/blog/ Aug 15, 2014 Value and Reference Types)
  9. Oracle 常用语句汇总
  10. win32 console application 如何修改图标?
  11. Python爬虫利器五之Selenium的用法
  12. Linux版 php5.4 升级php7
  13. 从码云上下载react项目并配置成可运行状态
  14. 解决ERR Client sent AUTH, but no password is set
  15. Java基础知识--集合
  16. 【Java并发编程】之六:Runnable和Thread实现多线程的区别
  17. DEX 可视化查阅
  18. 舌尖上的硬件:CPU/GPU芯片制造解析(高清)(组图)
  19. SpringMVC配置session过期拦截器,返回登录页面
  20. 通用型正方教务(通杀各版本)存在注入(不需登陆)+获得webshell+提权内网漫游

热门文章

  1. Linux下SuperLU安装
  2. 单例模式的理解【php】
  3. Oracle数据库的性能调整
  4. C#的WaitHandle : 管理多线程状态
  5. JavaScript 事件代理绑定
  6. (转载)Html解析工具Jsoup
  7. study reference
  8. 关于template 的23个问题
  9. HDU 2830 Matrix Swapping II (预处理的线性dp)
  10. PHP获取数组长度的方法 函数参数的比较