动态规划超时
思路可以有哈
class Solution {
public:
bool canWinNim(int n) {
vector<bool> dp(n+1);
for(int i=0;i<4;i++) dp[i]=true;
for(int i=4;i<=n;i++) dp[i]=!(dp[i-1]&&dp[i-2]&&dp[i-3]);
return dp[n];
}
};
一行本质解题
如果能被4整除, 我们肯定会输 如4、8、12、… 无论我们怎么选,对方都可以在下一步凑出和为4,到最后仍是我们从4个石头里选。
class Solution {
public:
bool canWinNim(int n) {
/ 或 return n%4;
return n&3;
}
};