设为首页 加入收藏

TOP

poj 3537Crosses and Crosses 博弈论之grundy值
2015-11-21 00:59:02 来源: 作者: 【 】 浏览:1
Tags:poj 3537Crosses and Crosses 博弈论 grundy

题意:

给1*n的格子,轮流在上面叉叉,最先画得3个连续叉叉的赢,问先手必胜还是必败。

分析:

求状态的grundy值(也就是sg值),具体怎么求详见代码,为什么这么求要自己想的,只可意会(别人都说去看game theory,呵呵)。

代码:

?

//poj 3537
//sep9
#include 
  
   
#include 
   
     using namespace std; int grundy[2048]; int h[2048]; int get_grundy(int n) { if(n<0) return 0; if(grundy[n]!=-1) return grundy[n]; int h[2048]; memset(h,0,sizeof(h)); for(int i=1;i<=n;++i){ int t=get_grundy(i-3)^get_grundy(n-i-2); h[t]=1; } int i; for(i=0;h[i];++i); return grundy[n]=i; } int main() { int n; memset(grundy,-1,sizeof(grundy)); grundy[0]=0,grundy[1]=1,grundy[2]=1,grundy[3]=1; while(scanf("%d",&n)==1) if(get_grundy(n)!=0) puts("1"); else puts("2"); return 0; } 
   
  


?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇LeetCode77:Combinations 下一篇简单词法分析器实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: