您的位置:首页 > 其它

扔鸡蛋问题

2016-04-12 19:24 239 查看
题目:

两个软硬程度一样的鸡蛋,它们在某一层摔下会碎,有个100层的建筑,要求最多用两个鸡蛋确 定鸡蛋安全下落的临界位置,给出临界位置?如果是n层楼,m个鸡蛋,请给出确定临界位置的算法
思路:

用动态规划做:

用F
表示n层楼最少次数。

假设一个鸡蛋从第i层扔下,破了,则下一个鸡蛋从第1层开始扔,还需要i-1次;如果没有破,则还剩下n-i层,剩下两个鸡蛋,需要F[n-i]次。因此,最少需要判断max(i-1,F[n-i])次。

状态转移方程:f
= min{ 1 + max(i - 1 ,f[n - i]) | i = 1 ..n
}

初始条件: f[ 0 ] = 0 (或f[ 1 ] = 1 )
现在推广成n层楼,m个鸡蛋:

还是动态规划。假设f[n,m]表示n层楼、m个鸡蛋时找到摔鸡蛋不碎的最少判断次数。则一个鸡蛋从第i层扔下,如果碎了,还剩m-1个鸡蛋,为确定下面楼层中的安全位置,还需要f[i-1,m-1]次(子问题);不碎的话,上面还有n-i层,还需要f[n-i,m]次(子问题,实体n层楼的上n-i层需要的最少判断次数和实体n-i层楼需要的最少判断次数其实是一样的)。

状态转移方程:f[n,m] = min{ 1 + max(f[i - 1 ,m - 1 ],
f[n - i,m]) | i= 1 ..n
}

初始条件:f[i, 0 ] = 0 (或f[i, 1 ] = i),对所有i
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: