思路:

dp。

https://leetcode.com/problems/guess-number-higher-or-lower-ii/discuss/

实现:

 1 class Solution 
 2 {
 3 public:
 4     int getMoneyAmount(int n) 
 5     {
 6         int dp[n + 1][n + 1];
 7         memset(dp, 0x3f, sizeof dp);
 8         for (int i = 0; i <= n; i++)
 9             dp[i][i] = 0;
10         for (int i = n - 1; i >= 1; i--)
11         {
12             for (int j = i + 1; j <= n; j++)
13             {
14                 for (int k = i; k <= j; k++)
15                 {
16                     dp[i][j] = min(dp[i][j], k + 
17                                    max(i > k - 1 ? 0 : dp[i][k - 1], 
18                                        k + 1 > j ? 0 : dp[k + 1][j]));
19                 }
20             }
21         }
22         return dp[1][n];
23     }
24 };

 实现2:

 1 class Solution
 2 {
 3 public:
 4     int dfs(int l, int r, vector<vector<int>> & dp)
 5     {
 6         if (l == r) return 0;
 7         if (dp[l][r] != -1) return dp[l][r];
 8         int ans = 0x3f3f3f3f;
 9         ans = min(ans, l + dfs(l + 1, r, dp));
10         ans = min(ans, r + dfs(l, r - 1, dp));
11         for (int i = l + 1; i <= r - 1; i++)
12         {
13             ans = min(ans, max(dfs(l, i - 1, dp), dfs(i + 1, r, dp)) + i);
14         }
15         return dp[l][r] = ans;
16     }
17     int getMoneyAmount(int n) 
18     {
19         vector<vector<int>> dp(n + 1, vector<int>(n + 1, -1));
20         return dfs(1, n, dp);
21     }
22 };

 

相关文章:

  • 2018-08-26
  • 2021-08-11
  • 2021-10-26
  • 2022-12-23
  • 2021-12-03
  • 2021-06-07
  • 2022-12-23
  • 2022-01-18
猜你喜欢
  • 2021-05-28
  • 2021-11-08
  • 2022-12-23
  • 2022-03-05
  • 2021-10-19
  • 2022-12-23
相关资源
相似解决方案