[hdu2089][不要62]

hdu2089

思路

数位dp模板题。从高位往低位进行搜索,用pos记录当前位置,lst记录上个位置的数字,bz记录上个位置是否是6,limit来记录上个位置是否达到了上界(如果达到了,就需要对当前位置的上界进行处理)

代码

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
ll read() {
    ll x=0,f=1;char c=getchar();
    while(c<'0'||c>'9') {
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9') {
        x=x*10+c-'0';
        c=getchar();
    }
    return x*f;
}
int f[20][2];
int a[20];
int dfs(int pos,int lst,int bz,int limit) {
    if(pos==0) return 1;
    if(f[pos][bz]!=-1) return f[pos][bz];
    int up=limit?a[pos]:9;
    int ans=0;
    for(int i=up;i>=0;--i) {
        if(i==4||(lst==6&&i==2)) continue;
        ans+=dfs(pos-1,i,i==6,limit&&i==up);
    }
    if(!limit) f[pos][bz]=ans;
    return ans;
}
int solve(int x) {
    memset(a,0,sizeof(a));
    memset(f,-1,sizeof(f));
    while(x){ 
        a[++a[0]]=x%10;
        x/=10;
    }
    return dfs(a[0],0,0,1);
}
int main() {
    int l,r;
    while(1) {
        l=read();
        r=read();
        if(!l&&!r) break;
        printf("%d\n",solve(r)-solve(l-1));
    }
    return 0;
}
全部评论

相关推荐

03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务