这是一个指向spoj问题problem
的链接我是解决Dp问题的初学者。
虽然我发现了一些模式..但我无法以有效的方式表达它。
我尝试了天真的方法,但这肯定会给TLE。
void cal(int *a,int n)
{
while(n!=0)
{
a[n%10]++;
n/=10;
}
}
void print(int *a)
{
int ans=0;
for(int i=1;i<=9;i++)
{
ans+=i*a[i];
}
printf("%d\n",ans);
}
然后从较大的数字中减去较小的no的总和。并添加下限的数字之和.. 即a = 12 b = 15
SUM1 = 51 SUM2 = 66
ans = 66-51 +(12 = 1 + 2的数字之和)= 15 + 3 = 18
任何帮助都会有所帮助。提前付款。
答案 0 :(得分:0)
我会尝试给你一些提示,而不是为你解决整个问题:
不要编写一个计算区间[a,b]
中的和的函数,而是编写一个函数来计算区间[0,x]
中的总和而不是:
SUM([a,b]) = SUM([0, b]) - SUM([0, a-1])
L
的数字之和,对于每个数字d
,计算在{{1}之前的所有数字中作为数字满足的次数}。要做到这一点,计算L
显示为单位数字的次数,显示为十位数的次数,依此类推。