1个长度为2N的数,如果左边N个数的和 = 右边N个数的和,那么就是一个幸运号码。
例如:99、1230、123312是幸运号码。
给出一个N,求长度为2N的幸运号码的数量。由于数量很大,输出数量 Mod 10^9 + 7的结果即可。
Input
输入N(1<= N <= 1000)
Output
输出幸运号码的数量 Mod 10^9 + 7
Input示例
1
Output示例
9
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define LL long long
LL a[1010][9010];
int main()
{
memset(a,0,sizeof(a));
int n;scanf("%d",&n);
LL mod=1000000007;
a[0][0]=1;
for (int i=1;i<=n;i++)
{
for (int j=0;j<=9;j++)
{
for (int k=j;k<=i*9;k++)
{
a[i][k]=(a[i][k]+a[i-1][k-j])%mod;
}
}
}
LL ans=0;
for (int i=1;i<=9*n;i++)
{
for (int j=1;j<=9;j++)
{
if (i<j)
break;
ans=(ans+a[n][i]*a[n-1][i-j])%mod;
}
}
printf("%lld\n",ans);
return 0;
}