题解:
class Solution { public: bool PredictTheWinner(vector<int>& nums) { return dfs(nums,0,nums.size()-1,1)>=0; } // 1. 通过使用start和end来限定剩下可选元素; // 2. 玩家1选为正,玩家2选为负,最后只需要判断最后的结果为正还是为负即可; int dfs(vector<int>& nums,int start,int end,int fg) { if(start==end){ return nums[start]*fg; } int result1=nums[start]*fg+dfs(nums,start+1,end,-fg); int result2=nums[end]*fg+dfs(nums,start,end-1,-fg); // 由于题意(假设每个玩家的玩法都会使他的分数最大化。) // 所以我们每次都需要取最大化的值,也就是玩家1选result最大的,玩家2选result最大化(最小的) return max(result1*fg,result2*fg)*fg; } };