Eat Pizza
func pizza() {
input := []int{1,2,100,4,3,5,6}
M := make([][]int, len(input))
for i := range M {
M[i] = make([]int, len(input))
}
//base case: first 2 moves\
//move 1
for i := range M {
M[i][i] = input[i]
}
//move 2
for i := 0; i + 1 < len(M); i++ {
M[i][i+1] = max(M[i][i], M[i+1][i+1])
}
//Decisions:
//pick i aka. left
//opponent picks
//i + 1 : we get input[i] + M[i + 2][j]
//or
//j : we get input[i] + M[i + 1][j - 1]
//pick j aka. right
//opponent picks
//j - 1: we get input[j] + M[i][j - 2]
//or
//i : we get input[j] + M[i + 1][j - 1]
for offset := 2; offset < len(M); offset++ {
for i := 0; i + offset < len(M); i++ {
j := i + offset
var left int
if input[i+1] > input[j] {
left = input[i] + M[i + 2][j]
} else {
left = input[i] + M[i + 1][j - 1]
}
right := input[j]
if input[i] > input[j - 1]{
right += M[i + 1][j - 1]
} else {
right += M[i][j - 2]
}
M[i][j] = max(left, right)
}
}
fmt.Printf("the final answer is: %d", M[0][len(M) - 1])
}Last updated