zoukankan      html  css  js  c++  java
  • D

    题目链接:https://cn.vjudge.net/contest/270201#problem/D

    具体思路:利用斐波那契数列的性质,斐波那契数列可以构成任何正整数,所以按照顺序减下去肯定能减到0.

    斐波那契数列  1 1 2 3 5 8 13 21 。。。。。比如说给你一个20,先减去13,还剩7,然后再减去5,然后再减去2,这样就行了。

    并且减去的位置不是相邻的。对于这个题来说,要反着思考,从第199到200有一种跳法,从198到200有两种跳法,依次往下递归就可以了。这样有什么好处?防止传送门的安置会对后面的荷叶上的跳法产生影响,比如说在3处安放了一个传送门,那么到达5的跳法就会受到影响,而反向的话就可以避免这种情况,在后面安防传送门并不会对再后面的产生影响,然后建立传送门的时候,记录一下,然后分别连向1 3 5 等等就可以了,然后再再结束的地方安置一个无线循环的门就可以了。

    AC代码:

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    # define ll long long
    ll a[100000+1999];
    ll road[100000+1999];
    int main()
    {
        ll n;
        a[200]=1;
        a[199]=1;
        for(int i=198; i>=150; i--)
        {
            a[i]=a[i+1]+a[i+2];
        }
        while(~scanf("%lld",&n))
        {
            ll num=0;
            if(n==0)
            {
                printf("2
    1 1
    2 1
    ");
            }
            else
            {
                for(int i=150; i<=200; i++)
                {
                    if(n==0)break;
                    if(n-a[i]>=0)
                    {
                        road[++num]=i;
                        n-=a[i];
                    }
                }
                printf("%d
    ",num+1);
                for(int i=1; i<=num; i++)
                {
                    printf("%d %d
    ",i*2-1,road[i]);
                }
                printf("%d %d
    ",num*2,num*2);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    现在SimpleMemory的CSS(by BNDong)
    I AK IOI
    最大半联通子图
    曾经SimpleMemory的CSS
    幼儿园战争
    炸掉卡西欧991CNX
    LuoguP1131选择客栈
    2019CSP-S2养成任务
    NOIP2013&NOIP2018&USACO 三倍经验铺路题巧妙解法
    NOIP2018D2T1 旅行
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262813.html
Copyright © 2011-2022 走看看