1. 程式人生 > >勘測 牛客小白月賽10

勘測 牛客小白月賽10

連結:https://ac.nowcoder.com/acm/contest/280/A
來源:牛客網
 

題解: 斐波拉契數列,(增量是斐波拉契),  遞推式:d[i]=d[i-1]+p[i-1];

第i天等於前i-1天的再加上 由i-1變到i的增量

式子中的p[] 是斐波拉契  2 3 5 8~~~把每一天的二叉樹畫出來,很明瞭

有時間畫個圖放上面。qwq

程式碼

#include <iostream>

using namespace std;
#define int long long
const int maxn=6e6+5;
#define mod 10000000007
int d[maxn];
int p[maxn];
void  init(){
    d[1]=2;
    d[2]=3;
    for(int i=3;i<=maxn;i++){
        d[i]=(d[i-1]+d[i-2])%mod;
    }
}
void f(){
    p[1]=1;
    for(int i=2;i<=maxn;i++){
        p[i]=(p[i-1]+d[i-1])%mod;
    }
}

signed main(){
    int n;
    init();
    f();
    cin>>n;
    cout<<p[n]<<endl;

    return 0;
}

 

題目描述

Actci偶然發現了一個礦洞,這個礦洞的結構類似與一棵二叉樹,Actci發現的礦洞恰好位於根節點處,為了儘快挖掘,Actci找來了她的小夥伴們來幫忙,由於地質原因,每天小夥伴們只能打通到一條到子節點的道路(不消耗時間),也就是說每天一個節點只能向一個子節點建設道路,走一條路需要一天的時間,當發現一條道路後,會有一部分小夥伴選擇留下來繼續勘測,假設小夥伴們有無數個,樹的深度足夠大,問第n天最多共建設幾條道路。

輸入描述:

一行,一個數n。

輸出描述:

一行,一個數表示最多建設的道路數,答案對 10000000007 取模。

示例1

輸入

複製

2

輸出

複製

3

說明

樣例解釋:
設n號點的子節點編號為n×2和n×2+1,根節點編號為1.
第一天1->2,在1,2處留有一部分人,道路數為1。
第二天1->3,2->4,在2,3,4處留有人,道路數為3.

示例2

輸入

複製

100

輸出

複製

6531708670

備註:

資料範圍: