标签:blog http io ar os sp for div on
1
10
/*
思路:题目意思就是求1~1000000000之间数字之和等于s
状态方程 :d[i]][j]=d[i][j]+d[i-1][j-k] (0<=k<=j&&k<=9)
d[i][j]表示i位的数字之和等于j
推导:(数字之和等于j 的个数) =
(i位数字之和等于j的个数) + (i-1位数字之和j-k的个数)
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
int dp[10][100],n;
int main()
{
for(int i=1;i<10;i++)
dp[1][i]=1;
for(int i=1;i<10;i++)
for(int j=1;j<=9*i;j++)
for(int k=0;k<=j&&k<10;k++)
dp[i][j]+=dp[i-1][j-k];
while(scanf("%d",&n)!=EOF)
{
int ans=0;
if(n!=1)
{
for(int i=1;i<10;i++)
ans+=dp[i][n];
printf("%d\n",ans);
}
else
printf("10\n");
}
return 0;
}
标签:blog http io ar os sp for div on
原文地址:http://www.cnblogs.com/a972290869/p/4099957.html