博弈知识入门引导
【转】ACM博弈知识汇总
[掌握这个链接里面的kuangbin大佬总结的内容,你的博弈论的基础就可以过关了]
https://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html
举个栗子:
桌面上有N个小球,两个人轮流取,每人一次最多取不超过X (1<=X<n)个,取走最后一个小球的人获胜!
试问先手是否可以采取恰当的策略达到必赢的状态!可以的话输出yes,否则的话,输出no!
输入:
10 3
12 3
输出
yes
no
一种简洁的搜索方式:
代码:
1 #include <iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<algorithm> 5 #include<math.h> 6 using namespace std; 7 8 bool fact(int n,int k) //递归博弈代码 9 { 10 if(n==0)return false; 11 if(n<=k)return true; 12 for(int i=1; i<=n&&i<=k; i++) //本次作出选择选取i个小球 13 { 14 if(fact(n-i,k)==false)//下一位再走一次false 15 return true; 16 } 17 return false; 18 } 19 20 int main() 21 { 22 int n,k; 23 scanf("%d%d",&n,&k); 24 if(fact(n,k)) 25 printf("yes\n"); 26 else 27 printf("no\n"); 28 29 return 0; 30 }
你不逼自己一把,你永远都不知道自己有多优秀!只有经历了一些事,你才会懂得好好珍惜眼前的时光!