http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1894

题意:

有M个鹰蛋,N层楼,鹰蛋的硬度是E,也就是说在1~E层楼扔下去不会碎,E+1层楼扔下去会碎。
给定M,N,问最坏情况下至少几次能得到E的具体的值。(E可能为0)
①n<=100。
②n<=1000。
③n<=100000。
④n<=1000000。
⑤n<=1000000000。
推荐学习资料: 朱晨光IOI2004集训队论文 从《鹰蛋》一题浅析对动态规划算法的优化

算法一: O(n^3)

dp[i][j] 表示用i个蛋在j层楼上确定E,最坏情况下的最少次数
枚举在第w层扔下1个蛋,要么碎,要么不碎
碎:用剩下的i-1个蛋在下面的w-1层里确定E
不碎:剩下的i个蛋在 w+1~n 层里确定E,这相当于在 下面的n-w 层确定E
所以dp[i][j]=min{ max(dp[i-1][w-1],dp[i][j-w]) } +1
事件复杂度为 O(n^2 * m),m认为与n同阶

算法二:O(n^2 * logn)

根据判定树的理论,长为n的有序线性表,最坏查找需要次数为logn [上取整]
所以当鹰蛋的个数超过 log(n+1) [上取整] 时,直接输出log(n+1) [上取整]

算法三:O(n*logn*logn)

比较显然的结论:dp[i][j]>=dp[i][j-1]
(严谨的证明去看论文)
dp[i][j]=min{ max(dp[i-1][w-1],dp[i][j-w]) } +1
dp[i-1][w-1] 随w的增大单调不减
dp[i][j-w] 随w的增大单调不增
对于每一个w,对应的这两条线谁在上面就取谁
所以最终更新 dp[i][j]的w是这两条线的交点
可以二分找这个w

算法四:O(n*logn)

dp[i][j]=min{ max(dp[i-1][w-1],dp[i][j-w]) } +1
对于任意的w,满足 dp[i][j]<= max(dp[i-1][w-1],dp[i][j-w])  +1
令w=1,那么dp[i][j]<= max(dp[i-1][0],dp[i][j-1])  +1
所以dp[i][j]<=dp[i][j-1]+1
所以 dp[i][j-1]<=dp[i][j]<=dp[i][j-1]+1
所以若存在一个w,能够使得dp[i][j]=dp[i][j-1],则dp[i][j]=dp[i][j-1]
若对于所有的w,都不能使得dp[i][j]=dp[i][j-1],则dp[i][j]=dp[i][j-1]+1
令p满足 dp[i][p]=dp[i][j-1]-1,dp[i][p+1]=dp[i][j-1]
那么dp[i][p]=dp[i][j-1]-1
dp[i][p+1]=dp[i][p+2]=……=dp[i][j-1]
计算dp[i][j]时,令j-w=p,则w=j-p
则 dp[i][j]=min{ max(dp[i-1][j-p-1],dp[i][p])  }
可以证明
当 dp[i-1][j-p-1]<=dp[i][p] 时,dp[i][j]=dp[i-1][j]
当 dp[i-1][j-p-1]>dp[i][p] 时,dp[i][j]=dp[i-1][j]+1
具体证明去看论文

算法五:

dp[i][j] 表示 用i个蛋,扔j次最坏情况下最大能确定的楼层数

扔一次碎了,那么剩下j-1次,剩下i-1个蛋

我们也希望用剩下的次数和剩下的蛋在下面能确定的楼层数最大,所以是dp[i-1][j-1]

扔一次没碎,那么剩下j-1次,剩下i个蛋

我们也希望用剩下的次数和剩下的蛋在上面能确定的楼层数最大,所以是dp[i][j-1]

加上扔蛋的这一次

所以 dp[i][j]=dp[i-1][j-1]+dp[i][j-1]+1

如果只有一个蛋,只能1层1层的试,dp[1][i]=i

如果只有一层,dp[i][1]=1

初始化和转移都跟 组合数C 很像

C爆炸式增长,所以这个也是爆炸式增长

论文里有证明

也就是说当n很大的时候,i和j很小

当n=2e9时,i和j只取到32就A了

#include<cstdio>using namespace std;typedef long long LL;LL dp[33][33];void DP()
{for(int i=1;i<=32;++i) dp[i][1]=1,dp[1][i]=i;for(int i=2;i<=32;++i)for(int j=2;j<=32;++j)dp[i][j]=dp[i][j-1]+dp[i-1][j-1]+1;
}int main()
{DP();int T;scanf("%d",&T);int n,m,ans;while(T--){scanf("%d%d",&n,&m);ans=-1;for(int i=1;i<=32;++i)if(dp[m][i]>=n) { ans=i; break; }if(ans==-1) puts("Impossible");else printf("%d\n",ans);}
}

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8453790.html

ZCMU 1894: Power Eggs相关推荐

  1. 题解---2015年浙江理工12月校赛

    A: 孙壕请一盘青岛大虾呗 A题比较容易,因为范围只有10,所以暴力搜索一下就好了,简单递归题 1 #include<cstdio> 2 #include<cstring> 3 ...

  2. 23、Power Query-XML与JSON数据获取

    首先扫盲: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript的一个子集: XML(Extensible Markup Langu ...

  3. 淘宝电商用户行为数据分析及可视化—基于MySQL/Power BI(含代码)

    本项目以阿里巴巴移动电商平台的真实用户-商品行为数据为基础,使用MySQL进行数据清洗,以AARRR模型.RFM模型为基础展开分析,再用Power BI做可视化,最后从提升用户活跃度.促进商品成交.差 ...

  4. The maighty power and flavor of plants

    Hi, I'm Derek Sarno. I'm a vegan chef. I specialize in bringing mushrooms and veg to the center plat ...

  5. vscode插件可以直接复制到_一款可以让代码“跳舞”的 VS Code 插件:Power Mode

    VS Code 插件市场最近上架了一款名为 "Power Mode" 的插件.这款插件可以让开发者的代码跳起曼妙的舞蹈 ,比如下方的颗粒特效! 颗粒特效 这款插件启用方式也很简单, ...

  6. power 芯片 运行linux,IBM Power系列的是不是只能用linux?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 POWER 是 Power Optimization With Enhanced RISC 的缩写,是 IBM 的很多服务器.工作站和超级计算机的主要处理 ...

  7. ibm刀片服务器虚拟化,IBM POWER刀片服务器的虚拟化解决方案v1.3.ppt

    IBM POWER刀片服务器的虚拟化解决方案v1.3 BladeCenter POWER blade JS21&JS22 虚拟化 PowerVM By Allan Figueroa Edit ...

  8. IBM全面拥抱Linux,为“认知商业”提供POWER

    ZD至顶网服务器频道 03月03日 新闻消息(文/于泽):3月1日,IBM开年大会--IBM论坛2016盛大开启."认知商业"是IBM此次提出并覆盖未来一段时间的目标或者愿景,等同 ...

  9. 论文:Multi-Objective Modified Grey Wolf Optimizer for Optimal Power Flow-最优潮流

    论文来源: Multi-objective Modified Grey Wolf Optimizer for ..._百度学术 http://xueshu.baidu.com/s?wd=Multi-O ...

最新文章

  1. useradd与adduser的区别
  2. 文巾解题 292. Nim 游戏
  3. 百度MIP移动页面加速——不只是CDN
  4. 计算机中i o接口,计算机组成原理 输入输出(I/O)I/O 接口(I/O 控制器)
  5. 在Ubuntu下如何切换到超级用户
  6. Python入门--字符串的连接和替换,replace,join
  7. java中reg=new,JavaScript replace new RegExp使用介绍
  8. 《分布式系统原理与范型》习题答案 5.同步
  9. 谭浩强c语言程序设计笔记讲义,【笔记】谭浩强C语言程序设计--简明笔记
  10. csdn怎么添加好友
  11. 3.#技术|Android抓包的原理分析和实际操作,fiddler+Xposed+TrustMe++
  12. 跨平台移动开发平台Flutter环境搭建
  13. 小学生数量成为楼市风向标?
  14. python编程求1!+2!+…+n!_python计算阶乘和的方法(1!+2!+3!+...+n!)
  15. watch gt3 鸿蒙,华为matepad pro2和watchGT3系列即将发布!
  16. 路由器专用计算机,AUX端口常是通过专用连线与计算机连接,用来对路由器进行基本配置.._简答题试题答案...
  17. numpy中数据不以科学记数法显示
  18. 使用python-opencv去掉视频水印
  19. Elasticsearch 入门
  20. nginx keepalived高可用集群主从模式

热门文章

  1. laravel中的where和orwhere的源码分析
  2. laravel的carbon日期函数创建指定的now()日期以及遇到的一些坑
  3. 全网最经典26道Spring面试题总结,附面试题答案
  4. 【Linux入门到精通系列讲解】Nginx详细介绍和安装使用(这一篇就够了)
  5. Python程序设计题解【蓝桥杯官网题库】 DAY9-基础练习
  6. 机器字长,指令字长,数据子长,MDR
  7. j90度度复数运算_看得懂的复数
  8. .exp文件_mini_httpd 任意文件读取漏洞(附EXP脚本)
  9. Android 请求PHP接口, 返回json, 开头有问号, 解决方案
  10. Unable to instantiate Action,