套的模板 其实数位DP很简单 就是深搜的过程中DP
#include <bits/stdc++.h>
using namespace std;
long long dp[25][25][25];
int bit[25];
long long dfs(int pos,int pre,int len,int limit)
{
if(pos <= 0) return (len&1) != (pre&1);
if(!limit && dp[pos][pre][len] != -1) return dp[pos][pre][len];
int d = limit ? bit[pos] : 9;
long long sum = 0;
for(int i=0;i<=d;i++){
if(!len && !i){
sum += dfs(pos-1,1,0,limit && i == d);
}
else if(pre & 1){
if(!(i & 1) && len & 1) continue;
sum += dfs(pos-1,i,i & 1 ? len+1 : 1,limit && i == d);
}
else{
if(i & 1 && !(len & 1)) continue;
sum += dfs(pos-1,i,i & 1 ? 1 : len+1,limit && i == d);
}
}
if(!limit) dp[pos][pre][len] = sum;
return sum;
}
long long slove(long long n)
{
int len = 0;
while(n){
bit[++len] = n%10;
n /= 10;
}
return dfs(len,1,0,true);
}
int main()
{
ios::sync_with_stdio(false);
int T,cnt=0;
cin>>T;
while(T--){
memset(dp,-1,sizeof(dp));
long long l,r;
cin>>l>>r;
cout<< "Case #"<<++cnt<<": ";
cout<< slove(r) - slove(l-1) <<endl;
}
return 0;
}