链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089
数位dp经典入门题,这里给出一种简单做法。
#include<bits/stdc++.h>
typedef long long ll;
typedef long double ld;
#define INF 0x3f3f3f3f
#define MOD 1e+6
int main(){
int n, m, ans;
int i, j;
while(scanf("%d %d", &n, &m) && n && m){
ans = 0;
for(i = n; i <= m; ++i){
int tmp = i;
while(tmp){
if(tmp % 10 == 4){
ans++;
break;
}
if(tmp % 100 == 62){
ans++;
break;
}
tmp /= 10;
}
}
printf("%d\n", m-n+1-ans);
}
return 0;
}
注意点:只能记录非吉利数的个数,最后再相减得到答案(m-n+1-ans), 直接计数会超时,因为非吉利数要比吉利数要少得多,执行次数也就少的多。(要直接计算的话,要打表预处理)
本文解析了一道经典的数位DP入门题目,通过一个简洁的C++代码示例,介绍了如何计算特定范围内非吉利数的数量,并给出了计算吉利数数量的策略。文章强调了直接计数的效率问题及预处理的重要性。
699

被折叠的 条评论
为什么被折叠?



