题目

描述
最近XX公司举办了一个奇怪的比赛:鸡蛋硬度之王争霸赛。参赛者是来自世 界各地的母鸡,比赛的内容是看谁下的蛋最硬,更奇怪的是XX公司并不使用什么精密仪器来测量蛋的硬度,他们采用了一种最老土的办法–从高度扔鸡蛋–来 测试鸡蛋的硬度,如果一次母鸡下的蛋从高楼的第a层摔下来没摔破,但是从a+1层摔下来时摔破了,那么就说这只母鸡的鸡蛋的硬度是a。你当然可以找出各种 理由说明这种方法不科学,比如同一只母鸡下的蛋硬度可能不一样等等,但是这不影响XX公司的争霸赛,因为他们只是为了吸引大家的眼球,一个个鸡蛋从100 层的高楼上掉下来的时候,这情景还是能吸引很多人驻足观看的,当然,XX公司也绝不会忘记在高楼上挂一条幅,写上“XX公司”的字样–这比赛不过是XX 公司的一个另类广告而已。
勤于思考的小A总是能从一件事情中发现一个数学问题,这件事也不例外。“假如有很多同样硬度的鸡蛋,那么我可以用二分的办法用最少的次数测出鸡蛋 的硬度”,小A对自己的这个结论感到很满意,不过很快麻烦来了,“但是,假如我的鸡蛋不够用呢,比如我只有1个鸡蛋,那么我就不得不从第1层楼开始一层一 层的扔,最坏情况下我要扔100次。如果有2个鸡蛋,那么就从2层楼开始的地方扔……等等,不对,好像应该从1/3的地方开始扔才对,嗯,好像也不一定 啊……3个鸡蛋怎么办,4个,5个,更多呢……”,和往常一样,小A又陷入了一个思维僵局,与其说他是勤于思考,不如说他是喜欢自找麻烦。
好吧,既然麻烦来了,就得有人去解决,小A的麻烦就靠你来解决了:)

输入
输入包括多组数据,每组数据一行,包含两个正整数n和m(1<=n<=100,1<=m<=10),其中n表示楼的高度,m表示你现在拥有的鸡蛋个数,这些鸡蛋硬度相同(即它们从同样高的地方掉下来要么都摔碎要么都不碎),并且小于等于n。你可以假定硬度为x的鸡蛋从高度小于等于x的地方摔无论如何都不会碎(没摔碎的鸡蛋可以继续使用),而只要从比x高的地方扔必然会碎。
对每组输入数据,你可以假定鸡蛋的硬度在0至n之间,即在n+1层扔鸡蛋一定会碎。

输出
对于每一组输入,输出一个整数,表示使用最优策略在最坏情况下所需要的扔鸡蛋次数。

样例输入

100 1
100 2

样例输出

100
14

提示
最优策略指在最坏情况下所需要的扔鸡蛋次数最少的策略。
如果只有一个鸡蛋,你只能从第一层开始扔,在最坏的情况下,鸡蛋的硬度是100,所以需要扔100次。如果采用其他策略,你可能无法测出鸡蛋的硬度(比如你第一次在第二层的地方扔,结果碎了,这时你不能确定硬度是0还是1),即在最坏情况下你需要扔无限次,所以第一组数据的答案是100。

思路
采用DP的策略.
f[i][j]表示从第i层,用j个蛋尝试,所用得的最小次数,f[i][j]并不代表一定在第i层去扔,可以在1i中任意一层扔下一个蛋,因此搞一个循环变量k,k从1i,对于一个当前的k,这个鸡蛋扔下去有两种情况:碎和不碎。如果碎了,那此时只有j-1个蛋,要尝试1~k-1层,即是f[k-1][j-1]; 如果不碎,还有j个蛋,那么就要考虑k+1~i层,这等效于f[i-k][j]。所以f[i][j]=min( f[i][j] , max( f[k-1][j-1], f[i-k][j]) + 1)。

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
int dp[1001][101];
int i,j,k;
int n,m;
int main(){while(scanf("%d%d",&n,&m)!=EOF){for(i=1;i<=n;i++) for(j=0;j<=m;j++) dp[i][j]=i;   //最坏情况  for(j=1;j<=n;j++)    for(k=1;k<=j;k++)for(i=2;i<=m;i++)dp[j][i]=min(dp[j][i],max(dp[k-1][i-1],dp[j-k][i])+1);cout<<dp[n][m]<<endl;}return  0;
}

北京大学信科2017机试之鸡蛋的硬度相关推荐

  1. 北京大学信科2017机试真题之水淹七军

    **总时间限制: ** 1000ms 内存限制: 65536kB 描述 随着最后通牒的递出,C国的总攻也开始了,由于C国在地形上的优势,C国总司令下令采用水攻,剿灭A国最后的有生力量. 地形图是一个M ...

  2. 每日打卡 2017.03.15 北大信科2017机试真题题解

    注:除最后一题外均已在原题出处AC 题库链接:http://jmusoft.openjudge.cn/beida/ 1.奖学金 总时间限制:  1000ms  内存限制:  65536kB 描述 某小 ...

  3. 2017北大信科夏令营机试A:判决素数个数

    A:判决素数个数 查看 提交 统计 提示 提问 总时间限制:  1000ms  内存限制:  65536kB 描述 输入两个整数X和Y,输出两者之间的素数个数(包括X和Y). 输入 两个整数X和Y(1 ...

  4. 2017北大信科夏令营机试B:编码字符串

    B:编码字符串 查看 提交 统计 提问 总时间限制:  1000ms  内存限制:  65536kB 描述 在数据压缩中,一个常用的方法是行程长度编码压缩.对于一个待压缩的字符串,我们可以依次记录每个 ...

  5. 2017北大信科夏令营机试E:怪盗基德的滑翔翼

    E:怪盗基德的滑翔翼 查看 提交 统计 提问 总时间限制:  1000ms  内存限制:  65536kB 描述 怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯.而他最为突出的地方,就 ...

  6. 2017北大信科夏令营机试C:岛屿面积

    C:岛屿面积 查看 提交 统计 提问 总时间限制:  1000ms  内存限制:  65536kB 描述 用一个n*m的二维数组表示地图,1表示陆地,0代表海水,每一格都表示一个1*1的区域.地图中的 ...

  7. ECNU计科复试机试(2021)

    C.子序列 #include <iostream> #include <cstdio> #include <vector> #include <algorit ...

  8. ECNU计科复试机试(2019)

    B.三 数学构造 #include <iostream> #include <cstdio> #include <cmath>using namespace std ...

  9. 北大信科计算机考研复试,【盛世清北】2021年北大信科考研复试指南、复试分析、复试成功经验...

    原标题:[盛世清北]2021年北大信科考研复试指南.复试分析.复试成功经验 北大信息科学技术学院招生专业: 物理电子学.电路与系统.微电子学与固体电子学.电磁场与微波技术.电子科学与技术(量子电子学) ...

最新文章

  1. golang exec cmd pipeline zombile 进程
  2. C#静态类 转载:(原文:http://www.cnblogs.com/chenlulouis/ )
  3. map.get(key)空指针异常_NPE空指针异常总结
  4. 修复 Xcode 错误 “The identity used to sign the executable is no longer valid”
  5. Java设计模式笔记(4)模版方法模式
  6. vue项目编写html,从头搭建、编写一个VUE项目
  7. 《在近端对回传音频的检测和抑制》笔记
  8. Asp.Net中的三种分页方式总结
  9. ES6-----学习系列十三(类与对象)
  10. 微软去年安全业务收入150亿美元、新勒索软件以威联通设备为目标|1月27日全球网络安全热点
  11. win7 兼容 因特尔十代_高配主板想用win7咋办 Intel10代CPU配上驱动总裁玩转win7
  12. RN开发研究入门篇(一)项目搭建
  13. 高斯公式积分matlab,数值分析 高斯—勒让德积分公式
  14. 数据库周刊53丨2020数据风云人物及“年度最佳创新产品奖“揭晓;易鲸捷与平安科技达成战略合作;腾讯云TDSQL品牌升级;SQL等价改写;MySQL数据备份;Redis万字详解……
  15. 蓝牙音箱项目:记录CSR8635芯片的蓝牙音箱的开发过程
  16. Garbled Circuits介绍 - 56 Yao协议的实现 总结
  17. aka名字_中国新说唱:马来王子尤长靖,尤长靖自编AKA名字
  18. 传奇服务器如何修改地图和刷怪,传奇如何将怪物刷在指定地图?
  19. Cisco Packet Tracer 网络系统工程实训大作业【附网络拓扑图】
  20. 金九银十,一个新的王者在8月即将加冕——Treasure project(TPC)重磅来袭,你参与了吗?

热门文章

  1. 软考网络工程师学习笔记day04
  2. python二级选择题及答案_转载 |python二级选择题与分析(6)
  3. 一文即懂clickhouse 百亿级别实战
  4. wifi整机测试软件,dot11Expert(wifi检测工具)
  5. Deepin V20 双显卡安装NVIDIA驱动 实现外接显示器 (戴尔G3)
  6. 现货黄金k线图分析方法有多少
  7. 【真人手指动画制作软件】万彩手影大师教程 | 如何在2个动作之间添加新动作
  8. 服务器配置(测试服务器)
  9. FPGA_DDS生成正弦波
  10. 公众号快速吸粉提高微信分销商城的转化率案例分析