|
@@ -0,0 +1,25 @@
|
|
|
|
|
+func PredictTheWinner(nums []int) bool {
|
|
|
|
|
+ n := len(nums)
|
|
|
|
|
+ dp := make([][][]int, n)
|
|
|
|
|
+ for i := range dp {
|
|
|
|
|
+ dp[i] = make([][]int, n)
|
|
|
|
|
+ }
|
|
|
|
|
+ for i := 0; i < n; i++ {
|
|
|
|
|
+ dp[i][i] = []int{0, nums[i]}
|
|
|
|
|
+ }
|
|
|
|
|
+ for l := 2; l <= n; l++ {
|
|
|
|
|
+ for i := 0; i < n-l+1; i++ {
|
|
|
|
|
+ init, tail := dp[i][i+l-2], dp[i+1][i+l-1]
|
|
|
|
|
+ t := l % 2
|
|
|
|
|
+ score := make([]int, 2)
|
|
|
|
|
+ if nums[i]+tail[t]-tail[1-t] <= nums[i+l-1]+init[t]-init[1-t] {
|
|
|
|
|
+ score[t], score[1-t] = nums[i+l-1]+init[t], init[1-t]
|
|
|
|
|
+ } else {
|
|
|
|
|
+ score[t], score[1-t] = nums[i]+tail[t], tail[1-t]
|
|
|
|
|
+ }
|
|
|
|
|
+ dp[i][i+l-1] = score
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ t := n % 2
|
|
|
|
|
+ return dp[0][n-1][1-t] <= dp[0][n-1][t]
|
|
|
|
|
+}
|