有一个1*n的矩阵 固定第一个数为1 其他填正整数 且相邻数的差不能超过1 求方案数%1e9+7的结果
Input
一个数n 表示1*n的矩阵(n<=10^6)
Output
一个数 表示方案数%1e9+7的结果
Input示例
3
Output示例
5
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MOD = 1e9 + 7, MAXN = 1e6 + 7;
ll i, j, k, l, t, n, m;
ll f[MAXN], g[MAXN];
ll qpow(ll x, ll y)
{
ll result = 1;
while (y)
{
if (y & 1)
{
result = (result*x) % MOD;
}
y /= 2;
x = (x*x) % MOD;
}
return result;
}
int main()
{
cin >> n;
f[1] = 1, g[1] = 1, g[2] = 2, f[2] = 2;
for (i = 3; i <= n; i++)
{
g[i]=(g[i - 1] * (2 * i + 1) % MOD + 3 * (i - 1) * g[i - 2] % MOD) % MOD * qpow(i + 2, MOD - 2) % MOD;
f[i] = f[i - 1] * 3 - g[i - 2];
f[i] = (f[i] % MOD + MOD) % MOD;
}
cout << f[n] << endl;
return 0;
}