博弈知识入门引导

【转】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 }

 

posted @ 2018-08-15 14:16  山枫叶纷飞  阅读(205)  评论(0编辑  收藏  举报