#include<stdio.h>

//dp[i][0]代表不存在不吉利数字

//dp[i][1]代表不存在不吉利数字但是以2开头

//dp[i][2]代表存在不吉利数字

#define N 10

int dp[N][3];

void init() {

int i;

dp[0][0]=1;

for(i=1;i<10;i++) {

    dp[i][0]=dp[i-1][0]*9-dp[i-1][1];//当前不存在不吉利数字=上一个的不存在不吉利数字*非四-可能有不吉利数字以二开头

    dp[i][1]=dp[i-1][0];//上一个长度不吉利数字个数添加个2

    dp[i][2]=dp[i-1][2]*10+dp[i-1][0]+dp[i-1][1];//上一个状态的不吉利数字前面添加任意数+上一个状态的不存在不吉利数字前面加上4+上一个状态的不存在不吉利数字但是以二开头前面加上六

}

return ;

}

int slove(int x) {

       int a[N],i,j,k,flag=0,to=x;

       k=0;

       while(x) {

        a[++k]=x%10;//储存起来

        x/=10;

       }

       a[k+1]=0;

       j=0;//保存不吉利数字的个数

       for(i=k;i>0;i--) {

        j=j+dp[i-1][2]*a[i];//a[i]个i-1不吉利数字

        if(flag)j=j+dp[i-1][0]*a[i];//如果前面存在不吉利数字那么就随意了还要再加上当前的吉利数字的个数

        else {

            if(a[i]>4)j=j+dp[i-1][0];//如果存在a[i]等于四的情况,那么就要加i-1长度的吉利数字的个数

            if(a[i]>6)j=j+dp[i-1][1];//当存在a[i]大于六的情况,还要加上长度为i-1的以二开头的吉利数字的个数

             if(a[i+1]==6&&a[i]>2)j=j+dp[i][1];//如果当前可能为2的话,要加上当以二开头时的吉利数字的个数

        }

        if((a[i+1]==6&&a[i]==2)||a[i]==4)//标记最高位已出现过不吉利数字

            flag=1;

       }

       return to-j;

}

int main() {

    int n,m;

    init();

    while(scanf("%d%d",&n,&m),n||m) {

        printf("%d\n",slove(m+1)-slove(n));

    }

return 0;

}

hdu 2089 数位dp入门题的更多相关文章

  1. hdu:2089 ( 数位dp入门+模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 数位dp的模板题,统计一个区间内不含62的数字个数和不含4的数字个数,直接拿数位dp的板子敲就行 ...

  2. HDU 2089 数位dp入门

    开始学习数位dp...一道昨天看过代码思想的题今天打了近两个小时..最后还是看了别人的代码找bug...(丢丢) 传说院赛要取消 ? ... 这么菜不出去丢人也好吧~ #include<stdi ...

  3. 不要62(HDU 2089数位dp入门)

    题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 分析:dp[i][f]数字表示不含 4 和 62的前提下,剩余长度为 len ,首位是否为 6 的个数. #include < ...

  4. HDU 2089 不要62【数位DP入门题】

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. HDU 2089 - 不要62 - [数位DP][入门题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  6. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  7. 数位DP入门题

    站点一览: hdu 2089"不要62" hdu 4734"F(X)" poj 3252"Round Numbers" hdu 3709&q ...

  8. hdu 2089 数位dp

    链接:https://vjudge.net/problem/23625/origin 中文,题目不用说了. 其实这题的数据很小,所以直接暴力也可以过,但是还是要学会数位dp,因为并不是每一题的数据都会 ...

  9. 数位DP入门题——[hdu2089]不要62

    数位DP是我的噩梦. 现在初三了,却没AC过数位DP的题目. 感觉数位DP都是毒瘤-- 题目 hdu不用登录也可以进去,所以就不把题目copy到这里来了. 题目大意 求区间[n,m][n,m][n,m ...

随机推荐

  1. ConcurrentDictionary中的 TryRemove

    class A { internal int value; } ConcurrentDictionary<int, A> dic = new ConcurrentDictionary< ...

  2. codeforces 899F Letters Removing set+树状数组

    F. Letters Removing time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  3. 多线程编程和Java网络编程

    1. 线程概述 多任务处理有两种类型:基于进程.基于线程(进程是指一种“自包容”的运行程序,有自己的地址空间; 线程是进程内部单一的一个顺序控制流) 基于进程的特点是允许计算机同时运行两个或更多的程序 ...

  4. 79.员工薪水报表 Extjs 页面

    1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" ...

  5. PCB MS SERVER 使用bcp命令将数据库数据导出到Excel

    在前年工程系统与APS系统对接时,需将工程系统数据导出来给APS,采用的正是bcp命令实现,速度超快. 这里将此命令使用方法整理如下: 一.写SQL将表数据导出到Excel @echo "& ...

  6. JS判断浏览器类型和详细区分IE各版本浏览器

    今天用到JS判断浏览器类型,于是就系统整理了一下,便于后期使用. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...

  7. Python 34(进程了解)

    一:僵尸进程与孤儿进程 测试程序: 基本概念: 一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中. ...

  8. 前端Canvas思维导图笔记

    看不清的朋友右键保存或者新窗口打开哦!喜欢我可以关注我,还有更多前端思维导图笔记

  9. vue-router简单用法

    路由,其实就是指向的意思,当我点击页面上的home按钮时,页面中就要显示home的内容,如果点击页面上的about 按钮,页面中就要显示about 的内容.Home按钮  => home 内容, ...

  10. vim的快捷键大全

    vim是开发利器,掌握快捷可以事半功倍,这里总结下常用的快捷键,提高开发速度这里写代码片 1.vim ~/.vimrc 进入配置文件 如果不知道vimrc文件在哪,可使用 :scriptnames 来 ...