玻璃球掉落某楼层寻找Critical Break Floor(腾讯笔试题)
发布时间
阅读量:
阅读量
最近做的一道腾讯笔试题,大意是:
腾讯总部大厦深圳分部共有39层。你手中持有两个完全相同的玻璃球。当你将其中一个玻璃球从某一楼层向下扔出时,必然会出现两种情况:要么该球破碎要么不会破碎。这幢大楼存在一个临界楼层,在其以下的任何楼层均可安全地进行任意次数的抛掷而不使该球破损;而一旦达到或超越该临界楼层,则无论进行多少次抛掷都会导致该球破损。请注意一旦某次抛掷导致玻璃球破损你就不能再使用它来进行后续测试。现在,请设计一个方案使得在最坏的情况下所需抛掷次数最少即找到一种最优策略以最小化最坏-case下的抛掷次数
思路:
动态规划。设楼层N
把问题转换为在39-N里找临界楼层。
假如结果都保存在F[40]这个数组里面,那么:
F[N]=40-N,
F[40]=min(max(1,1+F[N-1]),max(2,1+F[N-2]),……,max(N-1,1+F[1]));
已知状态转移方程,代码就简单了:
#include <iostream>
using namespace std;
//gendlee 2016-9-17
#define N 40
int F[N]={0};
void Test()
{
int temp
全部评论 (0)
还没有任何评论哟~
