您的位置:首页 > 其它

POJ 2346 【DP】

2015-10-22 20:36 148 查看
题意:

给一个正的不大于10的偶数n,求n个数字组成的数字串前n/2位和后n/2位的和相等的个数。

思路:

dp[i][j]由i位数组成的和为j的数字串的个数。

dp[i][j]+=dp[i-1][j-k];

最后排列组合一下。

#include<stdio.h>
long long dp[6][50];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<=9;i++)
{
dp[1][i]=1;
}
for(int i=2;i<=n/2;i++)
{
for(int j=n/2*9;j>=0;j--)
{
for(int k=0;k<=9;k++)
{
if(j>=k)
dp[i][j]+=dp[i-1][j-k];
}
}
}
long long ans=0;
for(int i=0;i<=n/2*9;i++)
{
ans+=dp[n/2][i]*dp[n/2][i];
}
printf("%I64d\n",ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: