Guess Number Higher or Lower II

来源:互联网 发布:诺基亚x7软件下载 编辑:程序博客网 时间:2024/05/09 12:23

一、题目

英文:Guess Number Higher or Lower II

中文:猜数字大小

二、内容要求

英文:We are playing the Guess Game. The game is as follows:
I pick a number from 1 to n. You have to guess which number I picked.
Every time you guess wrong, I'll tell you whether the number I picked is higher or lower.
However, when you guess a particular number x, and you guess wrong, you pay $x. You win the game when you guess the number I picked.

中文:我们在玩猜谜游戏。游戏如下:
我从1到n选择一个数字,你得猜我选了哪个号码。
每次你猜错了,我都会告诉你我选的号码是高还是低。
然而,当你猜一个特定的数字X,你猜错了,你付出$ x你赢了游戏,当你猜我选的号码。

三、示例

n = 10, I pick 8.First round:  You guess 5, I tell you that it's higher. You pay $5.Second round: You guess 7, I tell you that it's higher. You pay $7.Third round:  You guess 9, I tell you that it's lower. You pay $9.Game over. 8 is the number I picked.You end up paying $5 + $7 + $9 = $21.

四、解析

For each number x in range[i~j]
we do: result_when_pick_x = x + max{DP([i~x-1]), DP([x+1, j])}
--> // the max means whenever you choose a number, the feedback is always bad and therefore leads you to a worse branch.
then we get DP([i~j]) = min{xi, ... ,xj}
--> // this min makes sure that you are minimizing your cost.

可知,其动态规划方程:matrix[s][e]=m+Math.max(matrix[s][m-1],matrix[m+1][e]) 注意控制边界条件。

五、代码

java代码