码迷,mamicode.com
首页 > 其他好文 > 详细

SG函数学习

时间:2019-11-01 18:33:15      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:amp   eof   http   break   csdn   简单   void   details   重置   

尼姆博弈就是sg函数的简单体现

学习粗:https://blog.csdn.net/luomingjun12315/article/details/45555495

//f[N]:可改变当前状态的方式,N为方式的种类,f[N]要在getSG之前先预处理
//SG[]:0~n的SG函数值
//S[]:为x后继状态的集合
int f[N],SG[MAXN],S[MAXN];
void  getSG(int n){
    int i,j;
    memset(SG,0,sizeof(SG));
    //因为SG[0]始终等于0,所以i从1开始
    for(i = 1; i <= n; i++){
        //每一次都要将上一状态 的 后继集合 重置
        memset(S,0,sizeof(S));
        for(j = 0; f[j] <= i && j <= N; j++)
            S[SG[i-f[j]]] = 1;  //将后继状态的SG函数值进行标记
        for(j = 0;; j++) if(!S[j]){   //查询当前后继状态SG值中最小的非零值
            SG[i] = j;
            break;
        }
    }

}

  

SG函数学习

标签:amp   eof   http   break   csdn   简单   void   details   重置   

原文地址:https://www.cnblogs.com/starve/p/11778422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!