首页 > 代码库 > sg函数
sg函数
两种方法:
1.dfs求法
int mex(int n) { if(sg[n]!=-1) return sg[n]; int temp; bool vis[N]; memset(vis,false,sizeof(vis)); for(int i=0;i<10&&n>=arr[i];i++) { temp=n-arr[i]; sg[temp]=mex(temp); vis[sg[temp]]=true; } for(int i=0;;i++) { if(!vis[i]) { sg[n]=i; break; } } return sg[n]; }
2.打表法
void getSG() { sg[0]=0; bool vis[N]; for(int i=1;i<=1000;i++) { memset(vis,false,sizeof(vis)); for(int j=0;arr[j]<=i;j++) { vis[sg[i-arr[j]]]=true; } for(int j=0;;j++) { if(!vis[j]) { sg[i]=j; break; } } } }
总结:个人推荐第二种,因为第一种很容易会造成栈溢出,而且递归很浪费时间。
sg函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。