#include
int f[82]={1,10,45,165,495,1287,3003,6435,12870,24310,43749,75501,125565,202005,315315,478731,708444,1023660,1446445,2001285,2714319,3612231,4720815,6063255,7658190,9517662,11645073,14033305,16663185,19502505,22505751,25614639,28759500,31861500,34835625,37594305,40051495,42126975,43750575,44865975,45433800,45433800,44865975,43750575,42126975,40051495,37594305,34835625,31861500,28759500,25614639,22505751,19502505,16663185,14033305,11645073,9517662,7658190,6063255,4720815,3612231,2714319,2001285,1446445,1023660,708444,478731,315315,202005,125565,75501,43749,24310,12870,6435,3003,1287,495,165,45,9,1};
int main()
{
int n;
while(~scanf("%d",&n))
{
printf("%d\n",f[n]);
}
return 0;
}
動態規劃!
AC碼:
#include
int dp[10][82];
void DP()
{
int i,j,k;
for(i=1;i<10;i++)
dp[1][i]=1;
for(i=1;i<10;i++)
{// i表示有i位數字時
for(j=1;j<=9*i;j++)
{// j表示變化范圍,當有i位數時,j的范圍[1,9*i]
for(k=0;k<10&&k<=j;k++)
{
dp[i][j]+=dp[i-1][j-k];
}
}
}
}
int main()
{
int n,i,ans;
DP();
while(~scanf("%d",&n))
{
if(n==1)
printf("10\n");
else
{
ans=0;
for(i=1;i<10;i++)
ans+=dp[i][n];
printf("%d\n",ans);
}
}
return 0;
}