【51nod 1556】计算(默慈金数)

描述:
有一个1n的矩阵 固定第一个数为1 其他填正整数 且相邻数的差不能超过1 求方案数%1e9+7的结果
输入
一个数n 表示1
n的矩阵(n<=10^6)
输出
一个数 表示方案数%1e9+7的结果
输入样例
3
输出样例
5
用到一个叫默慈金数的东西,具体描述自行百度。给出递推关系式子。
M n = ( 2 n + 1 ) M n − 1 + ( 3 n − 3 ) M n − 2 n + 2 M_{n}=\frac{(2n+1)M_{n-1}+(3n-3)M_{n-2}}{n+2} Mn=n+2(2n+1)Mn1+(3n3)Mn2
代码:

#include
#include
#include
#include
#include
#include
#include
#define maxn 1000005
#define ll long long
#define mod 1000000007
using namespace std;
ll P(ll a,ll b)
{
    ll ans=1;
    while(b)
    {
        if(b&1)ans=ans*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return ans;
}
ll m[maxn],ans[maxn];
void init()
{
    m[1]=1,m[2]=2;
    for(int i=3;i>n;cout<

你可能感兴趣的:(组合数学,默慈金数)