涉及知识点:
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;
}