文章目录
NIM 博弈
必败点==0,必胜点>0
必败点只能走到必胜点,必胜点可能走到必败点。
sg值为可以到达目标点的点 中未出现的最小非负数。
#include<bits.stdc++.h>
using namespace std;
int f[10010];记录sg值
int mov[110];记录移动的方法
int k;移动方法的数量为k
int sg( int x){//记忆化dfs求解x的sg值
if(f[x]!=-1) return f[x];
int vis[110]={0};
for( int i=1;i<=k;i++){
if(x-mov[i]>=0) {
if(f[x-mov[i]]==-1){
f[x-mov[i]]=sg(x-mov[i]);
}
vis[f[x-mov[i]]]=1;
}
}
for( int i=0;;i++){//返回未访问过的最小值
if(vis[i]==0){
return i;
}
}
}
int main(){
memset(f,-1,sizeof(f));
f[0]=0;//0是必败点
}