1. 程式人生 > >博弈知識入門引導

博弈知識入門引導

遞歸 for == nbsp span () .cn arc can

【轉】ACM博弈知識匯總

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 }

博弈知識入門引導