#include<cstdio>
#include<cstring>
#define M 25
#define ll __int64
ll dp[M][10][10];
void init(){
memset(dp,0,sizeof(dp));
dp[0][0][0]=1;
ll n=10;
for(ll i=0;i<M-1;i++){
for(ll j=0;j<n;j++){
for(ll k=0;k<n;k++){
for(ll k1=0;k1<n;k1++){
ll t1=(k+k1)%n;
dp[i+1][k1][t1]+=dp[i][j][k];
}
}
}
}
}
ll w[M];
ll f(ll n){
if(n==0) return 0ll;
ll len=0;
while(n){
w[++len]=n%10;
n/=10;
}
ll flag=0;
ll tsum=0;
for(ll i=len;i>=1;i--){
for(ll j=0;j<w[i];j++){
ll t1=(100-flag)%10;
tsum+=dp[i][j][t1];
}
flag+=w[i];
flag%=10;
}
return tsum;
}
int main(){
init();
ll cas;
while(~scanf("%I64d",&cas)){
for(ll q=1;q<=cas;q++){
ll a,b;scanf("%I64d%I64d",&a,&b);
printf("Case #%I64d: ",q);
printf("%I64d\n",f(b+1)-f(a));
}
}
return 0;
}
/*
3
3213 65465456
*/
hdu 4722 good number 數位dp入門
明顯dp[i][j][k] 表示i爲取j的時候餘數爲k的個數 然後dp方程就顯然可得了,我看其他人都是2位,少了j這個位,但是我認爲有這位比較清楚啊,貼上代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.