#include#include #include #include using namespace std;int t;long long dp[19][19][2005];long long l, r;int digit[20];long long dfs(int len,...int if4..., bool limit){ if (len == 0) return 1; //个位 if (!limit && dp[len][...]) return dp[len][...]; //dp数组的内容应和dfs调用参数的内容相同,除了是否达到上限 long long cnt = 0; int up_bound = (limit ? digit[len] : 9); for (int i = 0; i <= up_bound; i++) { if(...) continue; //剪枝 ...; cnt += dfs(len-1, ..., limit && i == up_bound); } if (!limit) //完整状态 dp[len][...] = cnt; return cnt;}long long solve(long long x){ int k = 0; while (x) { digit[++k] = x % 10; x /= 10; } return dfs(k,...,1)}int main(){ memset(dp, 0, sizeof(dp)); scanf("%lld%lld", &l, &r); //有些题目其实并不需要用到long long printf("%lld\n", solve(r) - solve(l - 1)); //只有满足区间减法才能用 return 0;}