LC-375 猜数字大小Ⅱ

Posted leo-lzj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC-375 猜数字大小Ⅱ相关的知识,希望对你有一定的参考价值。

问题:

给出数字n,在1~n中,假设设定了一个数字x让你猜,你猜一个y,如果错误,那就收取¥y的费用,并告诉你x与y的大小关系。求出在1~n中,在最佳策略下猜出一个x至少要花费多少。(考虑所有情况)

 

思路:

这里用到了DP问题的解决思想。通过遍历猜所有数字的情况,例如n为5,猜3,那么就将问题分成,猜1~2和4~5这两个情况的最优花费(这两个子问题)再加上3的消耗。再对比一个本次最优值,记录下这麽猜的最优值,以便复用。

 

代码:

 1 class Solution {
 2 public:
 3     int getMoneyAmount(int n) {
 4         int** status = new int*[n + 1];
 5         for (int i = 0; i <= n; i++) {
 6             status[i] = new int[n + 1];
 7         }
 8         return dp(status, 1, n);
 9     }
10     
11     int dp(int** status, int start, int end) {
12         if (start >= end) return 0;
13         if (status[start][end] != 0) return status[start][end];
14         int local_min = INT_MAX;
15         for (int i = start; i <= end; i++) {
16             int tmp = i + max(dp(status, start, i - 1), dp(status, i + 1, end));
17             local_min = min(local_min, tmp);
18         }
19         status[start][end] = local_min;
20         return local_min;
21     }
22 };

 

以上是关于LC-375 猜数字大小Ⅱ的主要内容,如果未能解决你的问题,请参考以下文章

LC 375. Guess Number Higher or Lower II

猜数字小游戏

⭐算法入门⭐《二分枚举》简单12 —— LeetCode 374. 猜数字大小

374. 猜数字大小

285猜数字大小

3604猜数字大小