312. 戳气球

Hard

思路

看到问题是最大的数量是多少,想到使用动态规划方法来求解

以上,尝试写一下代码,AC!

代码

python3

class Solution:
  def maxCoins(self, nums: List[int]) -> int:
    # dp[i][j] = maxCoins(nums[i:j+1])
    n = len(nums)
    nums = [1] + nums + [1]
    dp = [[0 for _ in range(len(nums))] for _ in range(len(nums))]

    for l in range(1, n + 1):
      for i in range(1, n - l + 2):
        j = i + l - 1
        for k in range(i, j + 1):
          dp[i][j] = max(dp[i][j], dp[i][k-1] + dp[k+1][j] + nums[i-1] * nums[k] * nums[j+1])
    return dp[1][n]