博弈知識入門引導
阿新 • • 發佈:2018-08-15
遞歸 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 }
博弈知識入門引導