Egg Dropping Puzzle问题的分析
首先,基本问题是这样:You are given two eggs, and access to a 100-storey building. The aim is to find out the highest floor from which an egg will not break when dropped out of a window from that floor.
翻译成中文大概是这样:你得到两个鸡蛋,并进入一个100层楼。目的是找出从地板上掉下来的鸡蛋从地板上掉下来时不会破裂的最高层。
我谷歌了一下这个题目,发现应该是和动态规划相关的问题,应该有优化的过程。
我们可以用w(n,k)来表示,其中n表示鸡蛋的个数,k表示楼需要验证的层数。题目则用(2,100)来表示,假设第一次在第i个楼层扔鸡蛋,如果破碎了,则下一个鸡蛋从(1,i)的范围,所对应的公式为(1,i-1);如果没有碎,则这两个鸡蛋则从(i,100)的范围进行实验,所对应的公式为w(2,100-i)。
其对于的公式为
w(n,k)=1+max{w(n-1,i-1),w(n,k-i)}
其中w(1,1)到w(1,k)=k,w(n,1)=1,w(1,0)=0.
代码如下:
#include<iostream>
#include<stdio.h>
#include<math.h>
#define MAX 200
#define MAXMAX 10000
using namespace std;
int main()
{
int w[MAX][MAX]={};
int n,k;
cin>>n>>k;
for(int i=;i<=k;i++)
{
w[][i]=i;
}
for(int i=;i<=n;i++)
{
w[i][]=;
} int t;
for(int i=;i<=n;i++)
{
for(int j=;j<=k;j++)
{
int the_max=MAXMAX;
for(int x=;x<=j;x++)
{
t=max(w[i-][x-],w[i][j-x]);
if(the_max>t)
{
the_max=t;
}
}
w[i][j]=+the_max; }
} //cout<<w[n][k]<<endl;
for(int j=;j<=k;j++)
{
printf("%4d",j);
}
cout<<endl;
for(int i=;i<=n;i++)
{
printf("%4d",i);
for(int j=;j<=k;j++)
{
printf("%4d",w[i][j]);
}
cout<<endl; }
return ;
}
以w(2,36)为例,运行截图如下:

运行w(2,100)即可得到题目所求。
Egg Dropping Puzzle问题的分析的更多相关文章
- Egg Dropping Puzzle
The Two Egg Problem 曾经是Google的一道经典题. 题意:有一个百层高楼,鸡蛋在\(L\)层及以下扔都不碎,在\(L\)层以上都会碎.现在某人有\(k\)个鸡蛋,问在最坏情况下, ...
- 扔鸡蛋问题具体解释(Egg Dropping Puzzle)
经典的动态规划问题,题设是这种: 假设你有2颗鸡蛋,和一栋36层高的楼,如今你想知道在哪一层楼之下,鸡蛋不会被摔碎,应该怎样用最少的測试次数对于不论什么答案楼层都可以使问题得到解决. 假设你从某一层楼 ...
- 扔鸡蛋问题详解(Egg Dropping Puzzle)
http://blog.csdn.net/joylnwang/article/details/6769160 经典的动态规划问题,题设是这样的:如果你有2颗鸡蛋,和一栋36层高的楼,现在你想知道在哪一 ...
- 动态规划法(六)鸡蛋掉落问题(一)(egg dropping problem)
继续讲故事~~ 这天,丁丁正走在路上,欣赏着路边迷人的城市风景,突然发现前面的大楼前围了一波吃瓜群众.他好奇地凑上前去,想一探究竟,看看到底发生了什么事情. 原来本市的一位小有名气的科学家 ...
- 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值
第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...
- UVA 679 Dropping Balls 由小见大,分析思考 二叉树放小球,开关翻转,小球最终落下叶子编号。
A number of K balls are dropped one by one from the root of a fully binary tree structure FBT. Each ...
- 2 Egg Problem
继续我们的推理问题之旅,今天我们要对付的是一个Google的面试题:Two Egg Problem. 我们开始吧! No.2 Google Interview Puzzle : 2 Egg Prob ...
- 【LeetCode】887. Super Egg Drop 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 参考资料 日期 题目地址:https://leetc ...
- Workload Automation分析及其使用
Workload Automation介绍 Workload Automation是提供一个在设备上运行各种workload的工具,使用Python编写.WA具有良好的框架结构,方便快捷的扩展.包含几 ...
随机推荐
- 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译
1 编写以下案例(下面的三个按钮都调用了底层的C语言): 项目案例的代码结构如下: 2 编写DataProvider的代码: package com.example.ndkpassdata; ...
- Material Design之CardView的使用
本文介绍CardView这个控件的使用,CardView继承至FrameLayout类,是support-v7包下的一个类,使用时必须引入cardview依赖包,可在下载的sdk文件夹中找到... 使 ...
- Bookmarkable Pages
Build a Bookmarkable Edit Page with JDeveloper 11g Purpose In this tutorial, you use Oracle JDevel ...
- C语言之linux内核--BCD码转二进制与二进制转BCD码(笔试经典)
在分析代码之前,我们先来了解一下,BCD码和二进制到底区别在哪? 学习过计算机原理的和数字电子技术这两门课的都会知道这两个到底是什么含义,也有的同学学过了,考过了,过了一段时间又忘记了,今天,我们通过 ...
- Gradle 1.12用户指南翻译——第四十四章. 分发插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- jvm内存查看与分析工具
2.3 JVM的垃圾收集策略 GC的执行时要耗费一定的CPU资源和时间的,因此在JDK1.2以后,JVM引入了分代收集的策略,其中对新生代采用"Mark-Compact"策略, ...
- 关于linux音频指南
音频操作是linux系统下必不可少,如您需要设计一个播放器,那么音频就是其中的一部分. 方法/步骤 1 音调: 振动的频率; 音量: 振动的幅度; 音色: 不同介质有不同声音; ...
- window配置mongodb集群(副本集)
参数解释: dbpath:数据存放目录 logpath:日志存放路径 pidfilepath:进程文件,有利于关闭服务 logappend:以追加的方式记录日志(boolean值) replSet:副 ...
- 解读Raft(四 成员变更)
将成员变更纳入到算法中是Raft易于应用到实践中的关键,相对于Paxos,它给出了明确的变更过程(实践的基础,任何现实的系统中都会遇到因为硬件故障等原因引起的节点变更的操作). 显然,我们可以通过sh ...
- CRM客户关系管理系统(十二)
十二章.学员报名流程开发 2 12.1.学员报名合同和证件信息上传 功能: 必须勾选报名合同协议 必须上传个人证件信息 最多只能上传三个文件 文件大小2M以内 列出已上传文件 (1)crm/urls ...