题目链接:http://acm.xidian.edu.cn/problem.php?id=1007
题意:给定鸟蛋的数目和楼层数,确定鸟蛋的硬度。
这应该是一个比较经典的Dp了,看了别人朱晨光的论文,也就只能写个N^2 long N的算法了。
这篇文章让我懂了 log N的意思:鹰蛋实验
自己的理解:首先题目给定的有两个变量,我们可以很容想到一个式子:dp[i][j],但是,该如何对这个式子进行状态定义呢?用dp[i][j]表示:用i个鸟蛋进行楼层数为j(实际上楼层的最高层也就是j层了)的实验所需要的最多次数(就是题目要求的)。那么状态转移是怎样的呢?显然,第j层已经是最上面的那层了,那么在进行第j层实验之前,肯定会由下面的某个层转移得到,到底是那个层,我们并不确定,那么,我们就枚举j前面的每一个层就行了,假设其中一个楼层为w(w<=j),则用两种情况:
一:从第w层丢下去的鸟蛋破了,则dp[i][j]只能由w层下面的层数来决定:鸟蛋数为i-1,楼层数为w-1的实验来决定,这就是一个子问题了。
二:从第w层丢下去的鸟蛋没有破,则dp[i][j]只能由w层上边的层数来决定了,也就是:鸟蛋数为i,楼层数为j-w的实验决定,这又是一个子问题。
所以可以得到一个状态转移方程:
dp[i][j]=min(max{dp[i-1][w-1],dp