#include<bits/stdc++.h>
using namespace std;
#define ll long long
int a[20];
ll dp[20][MAXS1][MAXS2];
ll dfs(int pos,int s1,int s2,bool lead,bool limit) {
if(pos==-1) {
return ?;
}
if(!limit && !lead && dp[pos][s1][s2]!=-1)
return dp[pos][s1][s2];
int up=limit?a[pos]:9;
ll ans=0;
for(int i=0; i<=up; i++) {
int ns1=op1(s1);
int ns2=op2(s2);
ans+=dfs(pos-1,ns1,ns2,lead && i==0,limit && i==a[pos]);
}
if(!limit && !lead)
dp[pos][s1][s2]=ans;
return ans;
}
ll solve(ll x) {
if(x<=0)
return ?;
int pos=0;
while(x) {
a[pos++]=x%10;
x/=10;
}
return dfs(pos-1,INITS1,INITS2,true,true);
}
int main() {
memset(dp,-1,sizeof(dp));
ll le,ri;
while(~scanf("%lld%lld",&le,&ri)) {
printf("%lld\n",solve(ri)-solve(le-1));
}
}
模板 - 数位dp
猜你喜欢
转载自www.cnblogs.com/Inko/p/11393887.html
今日推荐
周排行