| 12345678910111213141516171819202122232425262728293031323334 | 
							- func getMoneyAmount(n int) int {
 
- 	dp := make([][]int, n+1)
 
- 	for i := 1; i <= n; i++ {
 
- 		dp[i] = make([]int, n+1)
 
- 	}
 
- 	return search(dp, 1, n)
 
- }
 
- func search(dp [][]int, beg, end int) int {
 
- 	if end <= beg {
 
- 		return 0
 
- 	}
 
- 	if dp[beg][end] != 0 {
 
- 		return dp[beg][end]
 
- 	}
 
- 	dp[beg][end] = 1<<32 - 1
 
- 	for i := beg; i <= end; i++ {
 
- 		left := search(dp, beg, i-1)
 
- 		right := search(dp, i+1, end)
 
- 		min := i + maxInt(left, right) // Prepare for the worst, but do your best
 
- 		if min < dp[beg][end] {
 
- 			dp[beg][end] = min
 
- 		}
 
- 	}
 
- 	return dp[beg][end]
 
- }
 
- func maxInt(x, y int) int {
 
- 	if x < y {
 
- 		return y
 
- 	}
 
- 	return x
 
- }
 
 
  |