标签:init ret span main long ons bre space ==
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2516
题意:有一堆石子,两人轮流取石子,先手最少取一个,至多无上限,但不能把物品取完,之后每次取的物品数不能超过上一次取的物品数的二倍且至少为一件,取走最后一件物品的人获胜。
题解:斐波那契博弈裸题
1 #include <cmath> 2 #include <iostream> 3 #include <algorithm> 4 using namespace std; 5 6 const int N=55; 7 typedef long long LL; 8 const int INF=0x3f3f3f3f; 9 int fib[N]; 10 11 void Init(){ 12 fib[0]=fib[1]=1; 13 for(int i=2;i<N;i++) 14 fib[i]=fib[i-1]+fib[i-2]; 15 } 16 17 int main(){ 18 int n; 19 Init(); 20 while(cin>>n&&n){ 21 int flag=0; 22 for(int i=2;i<N;i++){ 23 if(n==fib[i]) {flag=1;break;} 24 } 25 if(flag) cout<<"Second win"<<endl; 26 else cout<<"First win"<<endl; 27 } 28 return 0; 29 }
标签:init ret span main long ons bre space ==
原文地址:http://www.cnblogs.com/Leonard-/p/7642959.html