#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. 好记性不如烂笔头——WebService与Remoting

    一.WebService总体上分为5个层次: 1)HTTP传输信道 2)XML的数据格式 3)SOAP的封装协议,用于传输 4)WSDL的描述方式,用于引用 5)UDDI,通用描述.发现与集成服务,用 ...

  2. c# 命令行下编译c#文件 // c# file类读写文件

    c# 命令行下编译c#文件 2010-03-01 15:02:14|  分类: c# 学习|字号 订阅     在 开始  ——>程序 ——>vstool中打开vs2008命令提示. 通过 ...

  3. sql小计合计

    转自:http://www.jb51.net/article/18860.htm 这里介绍sql server2005里面的一个使用实例: CREATE TABLE tb(province nvarc ...

  4. mybatis一对多关系的关联查询

    问题描述:实现两张表的关联查询 学生表: 班级表: 要实现学生管理信息中有所在班级的名称,即如下图所示 1.对应学生表的pojo类写全班级表中的字段(适用于要连接的表字段较少的情况) sql语句直接在 ...

  5. C# 怎么把类文件如(XXX.cs)转为dll文件

    打开VS2012或2017 ,新建项目,选择  类库(.NET Framework),创建好一个项目 在建好的项目中添加需要转的类文件 然后将项目重新生成后,在项目的Debug下就可以找到对应的dll ...

  6. springboot + sharding-jdbc 学习

    官网地址:http://shardingsphere.io/document/current/cn/overview/ sharding-jdbc事务:https://blog.csdn.net/ya ...

  7. CNN结构:MXNet设计和实现简介

    对原文有大量修改,如有疑惑,请移步原文. 参考链接:MXNet设计和实现简介 文章翻译于:https://mxnet.incubator.apache.org/architecture/index.h ...

  8. AI:IPPR的数学表示-CNN基本结构分析( Conv层、Pooling层、FCN层/softmax层)

    类似于SVM,CNN为代表的DNN方法的边缘参数随着多类和高精度的要求必然增长.比如向量机方法,使用可以映射到无穷维的高斯核,即使进行两类分类,在大数据集上得到高精度,即保持准确率和高精度的双指标,支 ...

  9. SLAM:飞行机器人的参数解析-分类

    在水电站存在的山区,公路运输效率极低,盘山公路绕行消耗大量时间,使用飞行机器人进行运输是合适的选择. 实现一位长辈在山区飞行的愿望,任重而道远 常见飞行机器人的参数解析:解读飞行机器人的基本类型及技术 ...

  10. OpenCV向JNI层的参数转换

    九层之台,起于累土:千里之堤毁于蚁穴:成者半于九十.最近工程项目完全可以调试,却最后在 OpenCV向JNI层的参数转换 这个节点上遇到麻烦,看来得好好的思考一番,仔细寻找其中的纰漏. 一.实例 根据 ...