#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. CH Round #24 - 三体杯 Round #1-C 逃不掉的路

    留个e-DCC的板子 #include<cstdio> #include<iostream> #include<cstring> #include<cstdl ...

  2. golang LMDB入门例子——尼玛,LMDB的文档真的是太少了

    使用的是这个库:https://github.com/szferi/gomdb 安装: go get github.com/szferi/gomdb 代码: package main import ( ...

  3. Codeforces--630D--Hexagons(规律)

     D - Hexagons! Crawling in process... Crawling failed Time Limit:500MS     Memory Limit:65536KB    ...

  4. Linux下查看操作系统的位数和系统名称版本信息

    Linux下如何明确地查看操作系统的位数 如何知晓操作系统是32位还是64位?这里介绍一种简单的方式: [plain] [root@localhost mysql-5.1.57]# getconf L ...

  5. js定义类和方法

    js中定义一个类 //定义一个user类 var user = function(){ //类中的属性 var age; //设置age的值 var setAge = function(age){ t ...

  6. Django day13 form组件, 渲染错误信息, 全局钩子

    一:from组件 二:渲染错误信息 三:全局钩子

  7. 题解 UVA10587 【Mayor's posters】

    先讲一下:dalao @lisuier 发布的前一篇题解严格来讲是有错误的 比如下一组数据: 1 3 1 10 1 4 7 10 显然答案是3,然而用lisuier dalao的程序做出来的答案是2( ...

  8. android切换卡顿解决方法

    如果想要让应用用户流畅的滑动体验的话,那么就必须对activity和fragment的生命周期有一个完整的概念以及在何种情况下会触发哪些事件. 在自己目前做的项目中,就遇到了这样的问题,那么就把自己的 ...

  9. Hibernate多表映射(三)

    一对多|多对一 一个分类对应多个商品,一个商品只属于一个分类 创建分类表 products用set装,set特点值不能够重复 package com.hibernate.domain; import ...

  10. 【原创】.Net 微信 JS-SDK图片、语音上传接口的实现(MVC)-(一 、上传图片)

    前段时间在做一个微信的项目,遇到了一个上传图片的问题,花了一下午,解决了这个问题,然后把总结出来的代码,分享了出来. 最近又有一个图片+语音的功能, 更是蛋疼, 本次采用的不是File文件上传,然后转 ...