zoj 2290 Game 博弈论

思路:HDU有过类似的题目,也就是谁面对FIB数,就处于必败状态。

再求第二问的时候要注意不一定要在一步之内就让对手处于必败状态,可以多步进行,

这个过程可以用递归实现。

代码如下:

 1 #include<iostream>
 2 using namespace std;
 3 int fib[44];
 4 int dfs(int n)
 5 {
 6     int k=0;
 7     while(fib[k]<n) k++;
 8     if(fib[k]==n) return fib[k];
 9     else return dfs(n-fib[k-1]);
10 }
11 int main()
12 {
13     fib[0]=fib[1]=1;
14     for(int i=2;i<44;i++)
15         fib[i]=fib[i-1]+fib[i-2];
16     int n,m;
17     while(cin>>n){
18         int k=0;
19         while(fib[k]<n) k++;
20         if(fib[k]==n) cout<<"lose"<<endl;
21         else cout<<dfs(n-fib[k-1])<<endl;
22     }
23     return 0;
24 }
View Code
原文地址:https://www.cnblogs.com/xin-hua/p/3330729.html