
博弈
拉风的啤酒肚
菜鸟一枚若发表的文章有所错误望各位大神提出意见
展开
-
HDU2177----取(2堆)石子游戏
威佐夫博弈输出1的时候,接下来输出的第一次取之后剩下的,就是让我们输出取一次后能达到的奇异状态。有两种方法:1、只取一堆;2、两堆都取相同数量的石子。我们可以先确定小于初始状态的奇异状态有哪些,然后再判断这些奇异状态是否能够由以上两种方法达到。(注意:输出的时候取两堆的排在前面)#include #include #include #include using namespace原创 2013-08-19 22:29:44 · 839 阅读 · 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 · 616 阅读 · 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 · 673 阅读 · 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 · 543 阅读 · 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 · 862 阅读 · 0 评论