题目链接:https://vjudge.net/problem/HDU-2089
题意:[l ,r] 有多少不含62 和 4 的数
题解:dp[i][j] 表示后面还剩 i 位 前一位是否为6的数目
#include <bits/stdc++.h>
using namespace std;
int dp[10][2], w[10];
int dfs(int pos, int limit, int pre) {
if(pos < 0) return 1;
if(!limit && dp[pos][pre] != -1) return dp[pos][pre];
int p = limit ? w[pos] : 9;
int res = 0;
for(int i = 0; i <= p; i++) {
if(pre && i == 2) continue;
if(i == 4) continue;
res += dfs(pos - 1, limit && i == p, i == 6);
}
if(!limit) dp[pos][pre] = res;
return res;
}
int solve(int x) {
int len = 0;
while(x) {
w[len++] = x % 10;
x /= 10;
}
return dfs(len - 1, 1, 0);
}
int main() {
int l, r;
memset(dp, -1, sizeof(dp));
while(~scanf("%d %d", &l, &r) && (l + r)) {
printf("%d\n", solve(r) - solve(l - 1));
}
return 0;
}