My idea is to check if the Player 1 can get half of the total scores at least.

```
bool canWin(int goal, vector<int>& nums, int i, int j)
{
if(goal <= 0) return true;
if(i <= j) //Player 1 picks i || Player 1 picks j
return canWin(goal-nums[i], nums, i+2, j) && canWin(goal-nums[i], nums, i+1, j-1)
|| canWin(goal-nums[j], nums, i+1, j-1) && canWin(goal-nums[j], nums, i, j-2);
return false;
}
bool PredictTheWinner(vector<int>& nums) {
int goal = accumulate(nums.begin(), nums.end(), 0);
goal = (goal+1) / 2;
return canWin(goal, nums, 0, nums.size()-1);
}
```