[LeetCode] 375. Guess Number Higher or Lower II (Medium)

原题

思路:
miniMax+DP
dp[i][j]保存在i到j范围内,猜中这个数字需要花费的最少 money。
"至少需要的花费",就要我们 "做最坏的打算,尽最大的努力",即取最大值。

dp[beg][end] =MIN (  i + max(helper(beg, i - 1, dp), helper(i + 1, end, dp)) )
class Solution
{
public:
  int helper(int beg, int end, vector> &dp)
  {
    if (beg >= end)
    {
      return 0;
    }

    if (dp[beg][end] != 0)
    {
      return dp[beg][end];
    }

    int minPrice = 99999;
    int temp = 0;
    for (int i = beg; i <= end; i++)
    {
      temp = i + max(helper(beg, i - 1, dp), helper(i + 1, end, dp));
      if (temp < minPrice)
      {
        minPrice = temp;
      }
    }
    return dp[beg][end] = minPrice;
  }
  int getMoneyAmount(int n)
  {
    vector> dp(n + 1, vector(n + 1, 0));
    return helper(1, n, dp);
  }
};

你可能感兴趣的:([LeetCode] 375. Guess Number Higher or Lower II (Medium))