数位DP模板题,不多赘述了
#include <iostream>
using namespace std;
const int N = 35;
int f[N][N];
void init()
{
for(int i = 0;i <= 9;i ++) f[1][i] = 1;
for(int i = 2;i <= N;i ++)
for(int j = 0;j <= 9;j ++)
for(int k = j;k <= 9;k ++)
f[i][j] += f[i - 1][k];
}
int dp(int x)
{
if(!x) return 1;
int a[N] = {0};
int l = 0;
int ans = 0;
int last = 0;
while(x)
{
a[++ l] = x % 10;
x /= 10;
}
for(int i = l;i >= 1;i --)
{
for(int j = last;j < a[i];j ++)
ans += f[i][j];
if(last > a[i]) break;
last = a[i];
if(i == 1) ans ++;
}
return ans;
}
int main()
{
init();
int l,r;
while(cin >> l >> r) cout << dp(r) - dp(l - 1) << endl;
return 0;
}