博弈
拉风的啤酒肚
菜鸟一枚若发表的文章有所错误望各位大神提出意见
展开
-
HDU2177----取(2堆)石子游戏
威佐夫博弈 输出1的时候,接下来输出的第一次取之后剩下的,就是让我们输出取一次后能达到的奇异状态。有两种方法:1、只取一堆;2、两堆都取相同数量的石子。我们可以先确定小于初始状态的奇异状态有哪些,然后再判断这些奇异状态是否能够由以上两种方法达到。(注意:输出的时候取两堆的排在前面) #include #include #include #include using namespace原创 2013-08-19 22:29:44 · 755 阅读 · 0 评论 -
HDU1847----Good Luck in CET-4 Everybody!
可以用SG函数来做,也可以找规律。找规律是找3的倍数。下面我是用SG函数来做的,因为对SG函数还不熟悉,多练练手。 #include #include #include #include using namespace std; int a[15],i,j,sg[1005]; bool visit[1005]; void find_sg() { for(i=2;i<=1000;i+原创 2013-08-20 09:33:09 · 566 阅读 · 0 评论 -
POJ2975&&ZOJ3067----Nim
简单的Nim博弈,输出赢有多少种方法。 #include int main() { int n,i,a[1005]; while(scanf("%d",&n),n) { scanf("%d",&a[1]); int sum=a[1]; for(i=2;i<=n;i++) { scanf("%d",&a[i]); sum^=a[i]; } if(sum原创 2013-08-21 08:56:07 · 616 阅读 · 0 评论 -
POJ1067----取石子游戏
和HDU1527一模一样,威佐夫博弈,具体知识请看http://www.wutianqi.com/?p=1081 #include #include int main() { int a,b,min,max; double n=5; while(scanf("%d%d",&a,&b)!=EOF) { if(a==b && a==0 ) printf("0\n");原创 2013-08-17 19:02:27 · 497 阅读 · 0 评论 -
HDU1848----Fibonacci again and again
求出三堆石子的SG函数,然后异或之后来判断谁赢。 #include #include #include #include using namespace std; int sg[1005]; int n,m,p,f[1000],i,j; bool visit[1005]; void find_sg() { for(i=2;i<=1000;i++) { memset(visit原创 2013-08-20 09:24:33 · 816 阅读 · 0 评论