/* 数位dp 水题 开两维一个记录长度,一个记录上一个数 */ #include<stdio.h> #include<string.h> #define N 13 int dp[N][N]; int digit[N]; int dfs(int len,int cnt,int ok) { if(!len)return 1; if(!ok&&dp[len][cnt]!=-1) return dp[len][cnt]; int ans=0,i,maxx=ok?digit[len]:9; for(i=0;i<=maxx;i++) { if(cnt==11&&i==0) {//因为不含前导0,所以特殊判断 ans+=dfs(len-1,cnt,ok&&i==maxx); } else if(cnt-i>=2||i-cnt>=2) ans+=dfs(len-1,i,ok&&i==maxx); } if(!ok) dp[len][cnt]=ans; return ans; } int f(int n) { int len=0; while(n) { digit[++len]=n%10; n/=10; } return dfs(len,11,1); } int main() { int n,m; memset(dp,-1,sizeof(dp)); while(scanf("%d%d",&n,&m)!=EOF) { printf("%d ",f(m)-f(n-1)); } return 0;}