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