Link: https://leetcode.com/problems/visit-array-positions-to-maximize-score/description/
## 思路
思路参考[这里](https://leetcode.com/problems/visit-array-positions-to-maximize-score/solutions/3801776/java-c-python-dp-solution/)
一开始想要用jump game的方法做dfs+dp(code见下面) 但由于时间复杂度是$O(N)$ 所以会TLE
```dp[0]``` means the max score with last visit is even
```dp[1]``` means the max score with last visit is odd
## Code
```python=
class Solution:
def maxScore(self, nums: List[int], x: int) -> int:
dp = [-inf, -inf]
dp[nums[0]&1] = nums[0]
for i in range(1, len(nums)):
dp[nums[i]&1] = max(dp[nums[i]&1], dp[nums[i]&1^1]-x)+nums[i]
return max(dp[0], dp[1])
```
dfs+dp TLE code
```python=
class Solution:
def maxScore(self, nums: List[int], x: int) -> int:
dp = [0]*len(nums)
def dfs(i):
if dp[i]!=0: return dp[i]
dp[i] = nums[i]
for j in range(i+1, len(nums)):
nextScore = dfs(j)
if (nums[j]%2==0 and nums[i]%2==1) or (nums[j]%2==1 and nums[i]%2==0):
dp[i] = max(dp[i], nums[i]+nextScore-x)
else: dp[i] = max(dp[i], nums[i]+nextScore)
return dp[i]
return dfs(0)
```