难点在于DP动态转移方程的设置。dp[i][j]与dp[i+2][j],dp[i+1][j-1],dp[i][j-2]有关,当第一个人拿nums[i],第1个人之前可能的取值肯定是dp[i+1][j-1]和dp[i+2][j]中小的那个,因为第二个不会让你取到大的。当第一个人拿的是nums[j]时,同理
class Solution:
def PredictTheWinner(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
n=len(nums)
if n==1 or n&1==0: return True
dp=[[0]*n for _ in range(n)]
for l in range(n):
for i in range(n-l):
j=i+l
if l<=1: dp[i][j]=max(nums[i],nums[j])
else: dp[i][j]=max(min(dp[i+2][j],dp[i+1][j-1])+nums[i],min(dp[i][j-2],dp[i+1][j-1])+nums[j])
if dp[0][n-1]>=sum(nums)/2: return True
return False