码迷,mamicode.com
首页 > 其他好文 > 详细

4.21 每日一题题解

时间:2020-04-21 09:49:05      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:mes   无法   namespace   每日   注意   规律   斐波那契数   有一个   bit   

勘测

涉及知识点:

  • 找规律/斐波那契数列

solution:

  • \(先注意审题,这是一颗二叉树,而且模数是1e9+7\)
  • \(先推出来前5项,分别为1,3,6,11,19\)
  • \(没错,结束了,a[n] = a[n-1] + a[n-2] + 2\)
  • \(当然,如果想通过正确的姿势通过这道题,接着看:\)
  • \(只需要记录两个变量:有一个孩子的节点个数x,以及没有孩子的节点个数y\)
  • \(n = 2的时候,x = 1,y = 1\)
  • \(此时x和y都可以产生一个孩子节点,新产生节点个数 = (x + y)\)
  • \(有一个孩子的节点就变成了有两个孩子的节点,并且无法再产生孩子\)
  • \(没有孩子的节点就变成了有一个孩子的节点 ,转移一下,式子就出来了:\)
  • \(x = y, y = (x+y)\)

暴力std:

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
const ll mod = 1e10 + 7;
ll a[5000005];
int main()
{
    ll n;
    cin>>n;
    a[1] = 1,a[2] = 3;
    for(int i=3;i<=n;i++){
        a[i] = (a[i-1] + a[i-2] + 2);
        a[i] %= mod;
    }
    cout<<a[n]<<endl;
    return 0;
}

规范std:

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
const ll mod = 1e10 + 7;
ll a[5000005];
int main()
{
    ll n,ans = 1;
    cin>>n;
    a[0] = 1,a[1] = 1;
    for(int i=2;i<=n;i++){
        a[i] = (a[i-1] + a[i-2])%mod;
        ans = (ans + a[i])%mod;
    }
    cout<<ans<<endl;
    return 0;
}

4.21 每日一题题解

标签:mes   无法   namespace   每日   注意   规律   斐波那契数   有一个   bit   

原文地址:https://www.cnblogs.com/QFNU-ACM/p/12742209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!