URAL 1223. Chernobyl’ Eagle on a Roof
来源:互联网 发布:三菱fx编程代码 编辑:程序博客网 时间:2024/06/04 19:53
题目:给定楼层,鹰蛋数量。
鹰蛋的硬度E,满足楼层 小于等于E的时候,从这层楼扔下去,鹰蛋不会碎,高于E会碎。如果没碎,可以继续使用。
求最小需要确定E的值的 尝试次数(要扔几次)。
第一反应,二分。
100层楼,2个鹰蛋时,第一次试的50层。然后还需要50次。
结果答案是只需要14次尝试。所以不是简单的二分。
第一次尝试14层,若碎了,E<14还需13次尝试。共1+13=14次。
若14层没碎,E>=14,再尝试27层。
若27层碎了,14<=E<27, 还需12次尝试。共 2+12=14次。
若没碎,再尝试39,50,60,69,77,84,90,95,99层……总之不会超过14次。
还是动态规划写的,F[ i ][ j ] 表示 i 个鹰蛋,j 次尝试可以确定的最大楼层.
F[ i ][ j ]=Sum( F[ i-1 ][ k ] +1)+1 k=1,2,3,...,j-1 ;
由于递推式中有前N项和。于是,直接用的 FS[ i ][ j ] 表示 F [ i ][ j ]的前 j 项和。
int FS[1001][1001];//FS[i][j]-FS[i][j-1]表示 i个鹰蛋,j次尝试可以确定的最大楼层。int main(void){for(int j=0;j<=1000;j++) FS[1][j]=j*(j+1)/2,FS[j][0]=0,FS[j][1]=1;for(int i=2;i<=1000;i++){for(int j=2;j<=1000;j++){FS[i][j]=FS[i][j-1]+FS[i-1][j-1]+j;if(FS[i][j]-FS[i][j-1]>=2000) break;//楼层只有1000,后面的不需要。}}int N,E;while(cin>>E>>N&&(E||N)){int ANS;for(int j=1;j<=1000;j++){//可以二分,但是懒得二分了。 if(FS[E][j]-FS[E][j-1]>=N) {ANS=j;break;}}cout<<ANS<<endl;}return 0;}
0 0
- URAL 1223. Chernobyl’ Eagle on a Roof
- Ural 1223.Chernobyl’ Eagle on a Roof
- URAL 1223 Chernobyl’ Eagle on a Roof
- URAL 1223. Chernobyl’ Eagle on a Roof(记忆化搜索)
- 【URAL 1223】Chernobyl’ Eagle on a Roof(传说中的DP神优化之鹰蛋)
- URAL 1489. Points on a Parallelepiped
- URAL 1489 Points on a Parallelepiped
- ural 1489. Points on a Parallelepiped 计算几何
- [构造 找规律 孔明棋] Ural 1051 Simple Game on a Grid
- URAL 1032 A
- Ural 1260. A nudnik photographer
- ural 1032 Find a Multiple
- ural 1247. Check a Sequence
- URAL 1032. Find a Multiple
- Ural 1000. A+B Problem
- URAL 1247 Check a Sequence
- ural 1207. Median on the Plane
- URAL 1728. Curse on Team.GOV
- JSON 入门指南
- 操作符(++,+,+=,小于号,(),--等)重载
- Node.js 处理post请求(表单提交)
- HDU2222 Keywords Search AC自动机
- hdoj.1390 Binary Numbers 20140821
- URAL 1223. Chernobyl’ Eagle on a Roof
- BS组-培训-笔记20140821
- 解析AFNetWorking 网络框架(二)
- Session原理和Tomcat实现分析
- 本地服务-服务于访问者在同一进程
- HDU 2571 命运
- Java线程面试题Top50
- 【HDU】4973 A simple simulation problem. 线段树
- 【转】Linux系统调用列表