
就一个一个的枚举,1-3块手头,先手必胜,4块手头,先手必负,
5个石头,拿一个,让对手变成4个,那么必胜。
8个石头,不管怎么拿,必负。
因此可归纳出4的倍数的石头时,都必输。
这种是最简单的博弈论问题,因为容易枚举,很容易找到规律。

这种存在一个递归枚举的做法,非常经典,但是会超时。
class Solution {
public:
bool stoneGame(vector<int>& piles) {
return helper(0,piles.size()-1,0,0,true,piles);
}
bool helper(int left, int right, int scoreA, int scoreB, bool turnA, vector<int>& piles){
if(left==right){
return scoreA>scoreB;
}
if(turnA){
if(helper(left+1,right,scoreA+piles[left],scoreB,!turnA,piles)||helper(left,right-1,scoreA+piles[right],scoreB,!turnA,piles)) return true;
}else

&spm=1001.2101.3001.5002&articleId=109219489&d=1&t=3&u=fee5a2e207f04a618c5908fa66e0727e)
599

被折叠的 条评论
为什么被折叠?



