| 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]
 
- }
 
 
  |