https://www.51nod.com/Challenge/Problem.html#!#problemId=1042
这是一道数位dp,然而并不需要用dp写。
void solve(ll m, ll a[])
{
ll base = 1;
while (m / base){
//cur为当前计算的位上的数,left为它左边的数,right为它右边的数。
ll cur = m / base % 10, left = m / base / 10, right = m - m / base * base;
//计算在这位上每个数字出现的次数
for (int i = 0; i < 10; ++i){
//其实我这里并没有看懂,以后再看吧。
if (i > cur) a[i] += left * base;
else if (i < cur) a[i] += (left + 1) * base;
else a[i] += left * base + right + 1;
}
a[0] -= base;
base *= 10;
}
return ;
}