4.21 每日一题题解

勘测

涉及知识点:

  • 找规律/斐波那契数列

solution:

  • (先注意审题,这是一颗二叉树,而且模数是1e10+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;
}
原文地址:https://www.cnblogs.com/QFNU-ACM/p/12742209.html