375.guess-number-higher-or-lower-ii.go 610 B

12345678910111213141516171819202122232425262728293031323334
  1. func getMoneyAmount(n int) int {
  2. dp := make([][]int, n+1)
  3. for i := 1; i <= n; i++ {
  4. dp[i] = make([]int, n+1)
  5. }
  6. return search(dp, 1, n)
  7. }
  8. func search(dp [][]int, beg, end int) int {
  9. if end <= beg {
  10. return 0
  11. }
  12. if dp[beg][end] != 0 {
  13. return dp[beg][end]
  14. }
  15. dp[beg][end] = 1<<32 - 1
  16. for i := beg; i <= end; i++ {
  17. left := search(dp, beg, i-1)
  18. right := search(dp, i+1, end)
  19. min := i + maxInt(left, right) // Prepare for the worst, but do your best
  20. if min < dp[beg][end] {
  21. dp[beg][end] = min
  22. }
  23. }
  24. return dp[beg][end]
  25. }
  26. func maxInt(x, y int) int {
  27. if x < y {
  28. return y
  29. }
  30. return x
  31. }