51nod oj 1043 幸运号码 【数位DP】

来源:互联网 发布:好莱坞爱情电影知乎 编辑:程序博客网 时间:2024/06/08 17:56

1043 幸运号码
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题
 收藏
 关注
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;}


0 0
原创粉丝点击