# 375. Guess Number Higher or Lower II

410人阅读 评论(0)

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. Example: 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.


Given a particular n ≥ 1, find out how much money you need to have to guarantee a win.

1. k 就是答案，此时子问题的额外 cost = 0 ，当前位置总 cost  = k + 0;
2. k 过大，此时我们的有效区间缩小为 [i , k - 1] 当前操作总 cost  = k + dp[start][k - 1];
3. k 过小，此时我们的有效区间缩小为 [k + 1 , j] 当前操作总 cost  = k + dp[k + 1][j];

class Solution {
public:

int getMinCost(int s,int e,vector<vector<int>>& data)
{
if(s>=e)return 0;
if(data[s][e]!=0)return data[s][e];
int minCost = INT_MAX;
for(int i=s;i<=e;i++)
{
minCost = min(minCost,i+max(getMinCost(s,i-1,data),getMinCost(i+1,e,data)));
}
data[s][e]=minCost;
return data[s][e];

}
int getMoneyAmount(int n) {
vector<vector<int>> data(n+1,vector<int>(n+1,0));
return getMinCost(1,n,data);

}
};

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人简介
90后程序员,关注服务器后台开发、分布式系统
Contact me: janestar92[dot]163[dot]com
janestar.github.io
个人资料
• 访问：115817次
• 积分：2003
• 等级：
• 排名：第19278名
• 原创：81篇
• 转载：17篇
• 译文：1篇
• 评论：24条
博客专栏
 工程上一些常见问题总结 文章：7篇 阅读：25953
 总结经典数据结构与算法(LeetCode) 文章：22篇 阅读：11289
阅读排行
最新评论