码迷,mamicode.com
首页 > 其他好文 > 详细

LC-375 猜数字大小Ⅱ

时间:2019-01-28 21:15:31      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:new   nbsp   amount   money   bsp   复用   return   遍历   csdn   

问题:

给出数字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 猜数字大小Ⅱ

标签:new   nbsp   amount   money   bsp   复用   return   遍历   csdn   

原文地址:https://www.cnblogs.com/leo-lzj/p/10331533.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!