题目要求给一个N位数,计算共有多少前N/2位数字的和与后N/2位数字的和相同的数
提示
1)既然前N/2位与后N/2位相比,就可以简化成计算和为f[i][j]---和为j的i位数
2)如果N为奇数,则需乘10#include <stdio.h>
#include <string.h>
int dp[6][50];
int main()
{
int n;
int i,j,k;
int sum;
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(i=1;i<=5;i++)
for(j=0;j<=i*9;j++) //j表示这一项的和的值
for(k=0;k<=9;k++) //表示这一次加入的值
{
if(k>j)
break;
dp[i][j]+=dp[i-1][j-k];
}
while(scanf("%d",&n)!=-1)
{
sum=0;
for(i=0;i<50;i++)
sum+=(dp[n/2][i]*dp[n/2][i]);
if(n%2==1)
sum*=10;
printf("%d\n",sum);
}
return 0;
}
#include <stdio.h>
#include <string.h>
int dp[6][50];
int main()
{
int n;
int i,j,k;
int sum;
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(i=1;i<=5;i++)
for(j=0;j<=i*9;j++) //j表示这一项的和的值
for(k=0;k<=9;k++) //表示这一次加入的值
{
if(k>j)
break;
dp[i][j]+=dp[i-1][j-k];
}
while(scanf("%d",&n)!=-1)
{
sum=0;
for(i=0;i<50;i++)
sum+=(dp[n/2][i]*dp[n/2][i]);
if(n%2==1)
sum*=10;
printf("%d\n",sum);
}
return 0;
}