bzoj 2275: [Coci2010]HRPA

据说叫斐波那契博弈。

先手最少取的石子数是把n用斐波那契数列拆分后最小的数。

原题+证明:

http://blog.csdn.net/acm_cxlove/article/details/7835016

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n;
ll f[100];
int main()
{
    scanf("%lld",&n);
    f[0]=f[1]=1;int i;
    for(i=2;;i++)
    {
        f[i]=f[i-1]+f[i-2];
        if(f[i]>=n)break;
    }
    for(;;i--)
    {
        if(n==f[i])
        {
            printf("%lld\n",n);
            return 0;
        }
        if(n>f[i])n-=f[i];
    }
    return 0;
}

  

 

posted @   SD_le  阅读(308)  评论(0编辑  收藏  举报
努力加载评论中...
重置按钮
点击右上角即可分享
微信分享提示