312.burst-balloons.go 520 B

123456789101112131415161718192021
  1. func maxCoins(nums []int) int {
  2. n := len(nums) + 2
  3. arr := make([]int, n)
  4. copy(arr[1:], nums)
  5. arr[0], arr[n-1] = 1, 1
  6. dp := make([][]int, n)
  7. for i := 0; i < n; i++ {
  8. dp[i] = make([]int, n)
  9. } // dp[l][r] means the maximum coins one can get from (l, r) (l, r not included)
  10. for k := 2; k < n; k++ {
  11. for l := 0; l < n-k; l++ {
  12. r := l + k
  13. for i := l + 1; i < r; i++ {
  14. if coins := arr[l]*arr[i]*arr[r] + dp[l][i] + dp[i][r]; dp[l][r] < coins {
  15. dp[l][r] = coins
  16. }
  17. }
  18. }
  19. }
  20. return dp[0][n-1]
  21. }