hdu 2089 不要62 (数位dp基础题)

2023-11-24 07:10
文章标签 基础 dp hdu 不要 数位 62 2089

本文主要是介绍hdu 2089 不要62 (数位dp基础题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不要62

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 58665    Accepted Submission(s): 23095


Problem Description
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
不吉利的数字为所有含有4或62的号码。例如:
62315 73418 88914
都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。
你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。

 

Input
输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。

 

Output
对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。

 

Sample Input
1 100 0 0

 

Sample Output
80
题目大意:
求n..m区间里不含4和连续的62的数的个数。
区间dp基础题。
以下摘自xiaoxia、的cnblog,略有删改:

dp[i][j] 表示i位数,首位是j的数字有多少符合要求的。

很容易得到递推公式 :

如j=4时:dp[i][j]=0

j!=4时:

递推公式

如何根据数组dp求对于一个数n,0~n满足要求的数呢?

对于一个数,例如335,对应dp[3][3],但是满足要求的数有336,347,358……这些数超过了335……

所以通过dp[3][0],dp[3][1],dp[3][2]求得首位数字小于3的满足条件的三位数,dp[3][0]求得的数是001,052,093...也就是所有满足条件的一位或两位数……我们求得所有的2xx,1xx,0xx.

接下来要求的是如334,327这类首位是3满足条件的数字,既然首位只能是3,也就是第一位已经选完了,那么我们只要选择满足小于35的数字就可以了。和上面同理,我们只要求出dp[2][0],dp[2][1],dp[2][2]就可以求出首位小于3的两位数。这时求得的是32x,31x,30x。

然后我们求所有小于5的数字就ok。小于5也就是dp[1][0],dp[1][1],dp[1][2],dp[1][3],dp[1][4]。这时求得的是53x.

到此,所有小于335且满足的数全部求出。

但是还需要考虑的问题是62,4。

如果某一位数字为4,如77432的第三位(从左向右看)是4,那么我们依次求出6xxxx,5xxxx,...,0xxxx,76xxx,75xxx,...,70xxx,773xx,773xx,...,770xx,我们接来下需要求的是7742x....7740x,但这时所求的数是774xx的数,必然含有4,所以这时我们停止。

对于62,如果某一位数字是6,如5675,我们求完5xxx,4xxx,...0xxx之后再求56xx时,注意566x,565x,..,563x,561x,没有562x。如果数字中含有62,如5627,那么同4,求到562x的时候就应该停止继续求下去了。

因为求得的是小于n的数,所以求[0,n]之间的数需要求n+1.看代码更容易理解。

 

#include<cstdio>
#include<cstring>
#include<algorithm>using namespace std;const int maxn=8;//最多maxn位数int dp[maxn+5][10];//dp[i][j]表示以j开头的i位数满足条件的个数
int d[maxn+5];//记忆化
void init()
{memset(dp,0,sizeof(dp));for(int i=0;i<=9;i++){if(i!=4)dp[1][i]=1;}for(int i=2;i<=maxn;i++){for(int j=0;j<=9;j++){if(j!=4){for(int k=0;k<=9;k++)if(j!=6||k!=2)dp[i][j]+=dp[i-1][k];}}}
}//1..x-1符合条件的个数
int solve(int x)
{int ret=0;int len=0;while(x){len++;d[len]=x%10;x/=10;}d[len+1]=0;for(int i=len;i>=1;i--){for(int j=0;j<d[i];j++)if(d[i+1]!=6||j!=2)ret+=dp[i][j];if(d[i]==4||(d[i+1]==6&&d[i]==2))break;}return ret;
}int main()
{init();int n,m;while(scanf("%d%d",&n,&m),n){printf("%d\n",solve(m+1)-solve(n));}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/acboyty/p/9747658.html

这篇关于hdu 2089 不要62 (数位dp基础题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/421480

相关文章

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re