扔鸡蛋问题
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
两个软硬程度一样的鸡蛋,它们在某一层摔下会碎,有个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
相关文章推荐
- VR全景项目外包团队— VR/AR相关领域介绍和VR全景案例
- linux 5种查找命令
- 又一道有意思的OJ:GPS数据处理
- chche缓存
- Swift接口和扩展
- [case分享]AD 2003升级2008导致XP mode登陆域时间长
- 剑指offer系列之35:两个链表的第一个公共节点
- Django ModelAdmin 中设置字段的默认值
- 初学者理解throw和throws
- 嵌入式 uboot引导kernel,kernel引导fs
- json用法示例
- 调试openstack源码的方法
- DOM启蒙——第三章
- 【bzoj4514】[Sdoi2016]数字配对 费用流
- 搜狐 扎金花
- 3117 高精度练习之乘法——http://codevs.cn/problem/3117/
- easyUI框架下实现日期按年,年月,年月日方式显示
- 第七周项目2友元类
- 静态数据成员的应用
- 倒计时四天——opj:不吉利日期