您的位置:首页 > 其它

JOJ 1063: A Funny Game 解题报告

2009-07-24 17:58 330 查看
貌似我的办法太麻烦了。

 

题意 :

 

一个博弈问题,每次不得超过对方取的两倍

 
分析 :

 

1.   从开始往上面推到达某种情况,该情况一定输  ,(a,b)  其中,a为还有几个,b为此时最多取几个

 
2.   数组里存的是一定输的上限

 
3.   求一个数据 m  相当于求  (m,m-1)

 
代码 :

 

#include <iostream>
using namespace std;
int p[100001];
int main()
{
for(int i=2;i<=100000;++i)
{
for(int j=1;j<i;++j)
{
if(p[i-j]<2*j || j*2>=i-j)
{
p[i]=j;
}
else
{
break;
}
}
}
int n;
while(cin>>n,!(n==0))
{
if(n-1>p
)
{
printf("YES/n");
}
else
{
printf("NO/n");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: