ural 1353. Milliard Vasya's Function

http://acm.timus.ru/problem.aspx?space=1&num=1353

题意:输入一个s,求从1-10^9的数中各位数字之和是s的个数;

思路:采用一个0-81的数组记录和为i的个数,然后对每一位都从0-9进行遍历;

View Code
#include<cstdio>
using namespace std;
int main()
{
int ans[100],temp[100],n,i,j,k;
for(i=0;i<100;i++)
ans[i]=temp[i]=0;
scanf("%d",&n);
if(n==1)
printf("10\n");
else
{
for(i=0;i<10;i++)
ans[i]=1;
for(i=1;i<9;i++)
{
for(k=0;k<=81;k++)
temp[k]=ans[k];
for(j=0;j<=9;j++)
{
if(j!=0)
for(k=0;k<=81-j;k++)
temp[k+j]+=ans[k];

}
for(k=0;k<=81;k++)
ans[k]=temp[k];
}
printf("%d\n",ans[n]);
}
return 0;
}



posted @ 2011-12-10 09:50  LT-blogs  阅读(275)  评论(0编辑  收藏  举报