123456789101112131415161718192021 |
- func maxCoins(nums []int) int {
- n := len(nums) + 2
- arr := make([]int, n)
- copy(arr[1:], nums)
- arr[0], arr[n-1] = 1, 1
- dp := make([][]int, n)
- for i := 0; i < n; i++ {
- dp[i] = make([]int, n)
- } // dp[l][r] means the maximum coins one can get from (l, r) (l, r not included)
- for k := 2; k < n; k++ {
- for l := 0; l < n-k; l++ {
- r := l + k
- for i := l + 1; i < r; i++ {
- if coins := arr[l]*arr[i]*arr[r] + dp[l][i] + dp[i][r]; dp[l][r] < coins {
- dp[l][r] = coins
- }
- }
- }
- }
- return dp[0][n-1]
- }
|