zoj 2290 Game 博弈论

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

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

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

代码如下:

 #include<iostream>
using namespace std;
int fib[];
int dfs(int n)
{
int k=;
while(fib[k]<n) k++;
if(fib[k]==n) return fib[k];
else return dfs(n-fib[k-]);
}
int main()
{
fib[]=fib[]=;
for(int i=;i<;i++)
fib[i]=fib[i-]+fib[i-];
int n,m;
while(cin>>n){
int k=;
while(fib[k]<n) k++;
if(fib[k]==n) cout<<"lose"<<endl;
else cout<<dfs(n-fib[k-])<<endl;
}
return ;
}
上一篇:在 Windows 8 或 8.1 上安装 .NET Framework 3.5 安装错误:0x800f0906、0x800F081F


下一篇:几款国产开源的Windows界面库