博弈题一般可以通过递推打表找规律。
F【i】:数字为i时,先手的状态。
则只要i可以通过一步j转化到F[i-j]为败的状态,F【i】就是胜的状态。
打表可以看出来,如果N为奇数,先手败;N为偶数,先手胜。
也可以通过数学推导和证明得出上述结论。
class Solution {
private:
void dabiao(int N){
vector<bool> f(N+5,false);
f[1]=false;
f[2]=true;
for(int i=3;i<=N;i++){
for(int j=1;j<i;j++){
if(i%j==0 && !f[i-j]){
f[i]=true;
break;
}
}
}
for(int i=1;i<=N;i++){
cout<<f[i]<<endl;
}
}
public:
bool divisorGame(int N) {
// dabiao(200);
if(N%2==0){
return true;
}
return false;
}
};



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



