不要64 数位DP
Problem Description 
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。 
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。 
不吉利的数字为所有含有4或62的号码。例如: 
62315 73418 88914 
都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。 
你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。
Input 
输入的都是整数对n、m(0
#include <stdio.h>
#include <string.h>
#include <string.h>
int dp[10][3];//dp[i][j],i代表数字的位数,j代表状况
              //dp[i][0],表示不存在不吉利数字
              //dp[i][1],表示不存在不吉利数字,且最高位为2
                //dp[i][2],表示存在不吉利数字
void Init()
{
    memset(dp,0,sizeof(dp));
    int i;
    dp[0][0] = 1;
    for(i = 1; i<=6; i++)//数字最长为6
    {
        dp[i][0] = dp[i-1][0]*9-dp[i-1][1];//最高位加上不含4的9个数字的状况,但因为会放6,所以要减去前一种开头为2的情况
        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,或者是在2前面放6
    }
}
int solve(int n)
{
    int i,len = 0,tem = n,ans,flag,a[10];
    while(n)//将每一位拆分放入数组
    {
        a[++len] = n%10;
        n/=10;
    }
    a[len+1] = ans = 0;
    flag = 0;
    for(i=len; i>=1; i--)
    {
        ans+=dp[i-1][2]*a[i];
        if(flag)//如果已经是不吉利了,任意处理
            ans+=dp[i-1][0]*a[i];
        if(!flag && a[i]>4)//首位大于4,可以有放4的情况
            ans+=dp[i-1][0];
        if(!flag && a[i+1]==6 && a[i]>2)//后一位为6,此位大于2
            ans+=dp[i][1];
        if(!flag && a[i]>6)//此位大于6,可能的62状况
            ans+=dp[i-1][1];
        if(a[i]==4 || (a[i+1]==6&&a[i]==2))//标记为不吉利
            flag = 1;
    }
    return tem-ans;
}
int main()
{
    int l,r;
    Init();
    while(~scanf("%d%d",&l,&r),l+r)
    {
        printf("%d\n",solve(r+1)-solve(l));
        //因为solve函数中并没有考虑n是不是不幸数的情况,所以r+1只算了1~r,而l只算了1~l-1,这两者相减才是正确答案
    }
    return 0;
}
不要64 数位DP的更多相关文章
- ACM学习历程—HDU5587 Array(数学 && 二分 && 记忆化 || 数位DP)(BestCoder Round #64 (div.2) 1003)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5587 题目大意就是初始有一个1,然后每次操作都是先在序列后面添加一个0,然后把原序列添加到0后面,然后 ... 
- 【BZOJ-1833】count数字计数      数位DP
		1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 2494 Solved: 1101[Submit][ ... 
- SRM 510 2 250TheAlmostLuckyNumbersDivTwo(数位dp)
		SRM 510 2 250TheAlmostLuckyNumbersDivTwo Problem Statement John and Brus believe that the digits 4 a ... 
- Codeforces 55D (数位DP+离散化+数论)
		题目链接: http://poj.org/problem?id=2117 题目大意:统计一个范围内数的个数,要求该数能被各位上的数整除.范围2^64. 解题思路: 一开始SB地开了10维数组记录情况. ... 
- [kuangbin带你飞]专题十五 数位DP
		ID Origin Title 62 / 175 Problem A CodeForces 55D Beautiful numbers 30 / 84 Problem B HD ... 
- BZOJ_1833_[ZJOI2010]_数字计数_(数位dp)
		描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1833 统计\(a~b\)中数字\(0,1,2,...,9\)分别出现了多少次. 分析 数位dp ... 
- bzoj 1902: Zju2116 Christopher lucas定理 && 数位DP
		1902: Zju2116 Christopher Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 172 Solved: 67[Submit][Stat ... 
- UOJ#275. 【清华集训2016】组合数问题  数位dp
		原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ275.html 题解 用卢卡斯定理转化成一个 k 进制意义下的数位 dp 即可. 算答案的时候补集转化一下 ... 
- 2018牛客网暑假ACM多校训练赛(第四场)C Chiaki Sequence Reloaded (组合+计数) 或 数位dp
		原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round4-C.html 题目传送门 - https://www.no ... 
随机推荐
- html5 和h5的区别
			html5 是公认的web开发的html规范,是一系列关于html的标准,它就好比是国家的法律,比如未成年不准进网吧,网吧要是允许未成年人进入,国家就要对网吧和未成年人进行处罚和教育.同样的,你写的h ... 
- 百度之星 初赛三 最短路 2 Dijkstra
			打比赛的时候切的,不过竟然 wa 了 14 次~ 挺简单的,直接在跑 $Dijkstra$ 的时候记录一下路径最大值就好了. #include <bits/stdc++.h> #defin ... 
- cat:连接文件并打印输出到标准输出设备
			是 concatenate(连接.连续)的简写.cat 命令可以用来显示文本文件的内容,也可以把几个文件内容附加到另一个文件中,即连接合并文件. cat 命令的基本格式如下: [root@localh ... 
- python学习之路(7)
			调用函数 Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数.可以直接从Python的官方网站查看文档: http: ... 
- 15个流行的python框架
			Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台: ... 
- IDEA配置常见配置
			特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ... 
- 191016Django基础
			一.简单的webserver框架 from wsgiref.simple_server import make_server def login(req): #view函数 print(req[&qu ... 
- synchronized  读写同步
			synchronized 读写同步 这是一道面试题,很多人也遇到了. 要求:1.读-读 不用线程同步.2.读-写 要求线程同步,写的时候不能读.3.写-写同步.写的时候不能写. java lock读写 ... 
- Shell实现交互式登陆一台同时管理多台机器
			最近为了检测公司服务器的硬盘需要开10多台服务器的僚机来检测服务器,可是这10来台都是操作一样的命令,挨个操作下去太麻烦了 然后就想到了交互式登陆 这里需要创建一个Ip文件夹把你的Ip账户密码都放进去 ... 
- 如何消除  com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
			在application.properties中添加以下两句话: eureka.client.register-with-eureka=falseeureka.client.fetch-registr ... 
