这题和井字棋差不多
class Solution { public: vector<int> num; int a=0,b; int sum=0; int p(int turn){//以递归求得玩家1-玩家2的差值 玩家1想要越大越好 玩家2想要越小越好 int i,j; int pp; if(a==b){//只剩最后一个数了 到谁给谁 if(turn==0){ pp=sum+num[a]; }else{ pp=sum-num[a]; } return pp; } if(turn==0){//到玩家1了 sum+=num[a]; a++; i=p(1-turn); a--; sum-=num[a]; sum+=num[b]; b--; j=p(1-turn); b++; sum-=num[b]; if(i>j){ return i; }else{ return j; } }else{//到玩家2了 sum-=num[a]; a++; i=p(1-turn); a--; sum+=num[a]; sum-=num[b]; b--; j=p(1-turn); b++; sum+=num[b]; if(i<j){ return i; }else{ return j; } } return 0; } bool PredictTheWinner(vector<int>& nums) { num=nums; b=num.size()-1; if(p(0)>=0){ return true; } return false; } };
原文:https://www.cnblogs.com/hyffff/p/13604997.html