题意:求在区间[a,b]中每一位相加能整除10的数有多少个。
解题思路:用数位dp
#include<bits/stdc++.h>
#define ll long long
using namespace std;
char s1[20],s2[20];
int d[20];
ll dp[20][15];
ll dfs(int l,int h,bool lim)
{
if(l==0) return h==0? 1:0;
if(!lim&&dp[l][h]!=-1) return dp[l][h];
int k=lim? d[l]:9;
ll tp,r=0;
for(int i=0;i<=k;i++)
{
tp=dfs(l-1,(h+i)%10,lim&&i==d[l]);
r+=tp;
}
if(!lim)
dp[l][h]=r;
return r;
}
ll solve(char s[])
{
int l=strlen(s);
for(int i=0;i<l;i++)
{
d[l-i]=s[i]-'0';
}
int tp=dfs(l,0,true);
}
int main()
{
//freopen("t.txt","r",stdin);
int n;
scanf("%d",&n);
memset(dp,-1,sizeof(dp));
int cnt=0;
while(n--)
{
scanf("%s%s",s1,s2);
int t=0;
for(int i=strlen(s1)-1;i>=0;i--)
{
t+=s1[i]-'0';
}
if(t%10==0) t=1;
else t=0;
printf("Case #%d: %lld\n",++cnt,solve(s2)-solve(s1)+t);
}
return 0;
}