数位DP小记 + HDU 2089 不要62

群晖NAS从入门到精通的所有帖子汇总,只要这一篇就够了 本站陆陆续续的转载、原创帖子也有十几二十篇了,从不同的角度对群晖NAS的各种骚操作都有深入的讲解,虽然很多文章都不是讲的很深入,但是针对小白入门已经是足够了,希望对小白来说是一个入门,群晖NAS的大佬们勿喷,哪里写的不对的,请随时留言西安SEO优化站长一定在第一时间纠正修改。 阅读详情

【背景】

如何求出在给定区间[A,B]内,符合条件P(i)的数i的个数?
条件P(i)一般与数的大小无关,而与 数的组成有关,有一下几种P(i):
数i是递增/递减的:1234, 2579,…
双峰的:19280,26193,…
含/不含某一数字的,比如含49:49, 149, 1492,…  (见下方例题)
被某一数m整除的,比如m=13:39,130,650...  (见 Codeforces 410D Roman and Numbers )

【思路】

采用记忆化搜索实现。

搜索:dfs(i,j,k,ismax)

枚举第i位的数,匹配str[j],前一位是k,是否达到上限(ismax=true/false)
达到了上限只能统计cnt=sum(0~num[i]),否则可以统计cnt=sum(0~9)
记忆:return ismax ? cnt : dp[i][j][k] = cnt
为何这么做见下方代码注释
搜索入口:dfs(len,-1,-1,true)

【例题】


这题的P(i)是不含有4和62的数,那么只需dfs(i,is6,ismax)即可,表示当前搜索到第i位,前一位是否为6(因为要判断后面那个是否为2),是否达到上限。记忆dp[i][ismax],搜索入口为dfs(len,false,true)


完整代码:

/*15ms,232KB*/

#include<cstdio>
#include<cstring>
const int mx = 10;

int bit[mx], dp[mx][2];

///复杂度O(log n)
///若ismax为true则后面循环的时候i只能取0~bit[len]
///is6记录上一位是否为6
int dfs(int len, bool is6, bool ismax)
{
	if (len == 0) return 1; ///能递归到这里说明这串数符合要求,返回1
	if (!ismax && dp[len][is6] >= 0) return dp[len][is6];
	///若ismax为true,则还需要继续向下递归
	///为什么?对于n=5321来说,递归中的2xxx和3xxx可以直接在len=3时返回(因为xxx这颗子树已经被前面的1xxx算出来了)
	///但是在算5xxx时并不能直接返回,因为后面的xxx至多能取到321,还需要进一步往下递归
	int cnt = 0, maxnum = (ismax ? bit[len] : 9);
	for (int i = 0; i <= maxnum; ++i)
	{
		if (i == 4 || is6 && i == 2) continue; ///不能有4,或者前一位为6且该位为2
		cnt += dfs(len - 1, i == 6, ismax && i == maxnum); ///ismax && i == maxnum 用来判断是否达到位值上限
	}
	return ismax ? cnt : dp[len][is6] = cnt; ///根据ismax来决定是否记录dp(比如dp[3][1]记录的是6xx的所有数,即从600到699中的符合条件的数的个数)
}

int f(int n)
{
	int len = 0;
	while (n)
	{
		bit[++len] = n % 10;
		n /= 10;
	}
	return dfs(len, false, true); ///从首位开始递归统计
}

int main()
{
	int a, b;
	memset(dp, -1, sizeof(dp));
	while (scanf("%d%d", &a, &b), a)
		printf("%d\n", f(b) - f(a - 1));
	return 0;
}


转载请注明:http://blog.youkuaiyun.com/synapse7/article/details/21006265

一文了解英伟达(NVIDIA)所有显卡芯片 英伟达(NVIDIA)的产品线庞杂繁复,从面向游戏玩家的GeForce RTX系列,到数据中心的H100、B200,再到Jetson、DRIVE等边缘智能平台,一般人很难以厘清其全貌。这篇文章将用通俗而专业的语言,一文打通英伟达显卡芯片体系,让你彻底读懂这个GPU帝国是如何运转的。 阅读详情

相关推荐

汽车电缆选型实战:基于ISO 19642-3~12的7类电缆电压/材料/场景对照表

本文详细解析了基于ISO 19642-3~12标准的7类汽车电缆选型实战,涵盖电压等级、导体材料和场景应用的对照表。通过全参数速查表和典型选型陷阱分析,帮助工程师快速掌握从低压信号线到高压动力电缆的选型逻辑,提升新能源汽车与智能驾驶技术的安全性和可靠性。

weixin_29043895的博客 366

[HDU - 2089] 不要62 (动态规划 && 数位dp)

Link:http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 50093    Accepted Submission(s)

Hello Joanna 512

从零到一:手把手教你用DaVinci Configurator配置一个完整的AUTOSAR接口通信实例

本文详细介绍了如何使用DaVinci Configurator工具配置AUTOSAR接口通信实例,从环境准备到SWC端口定义、BSW模块配置,再到通信验证的全过程。通过实战案例'车窗控制'功能模块,帮助开发者快速掌握AUTOSAR架构下的接口通信配置技巧,提升汽车电子软件开发效率。

weixin_42557830的博客 451

HDU 2089 不要62(数位DP,三种姿势)

HDU 2089 不要62(数位DP,三种姿势) ACM 题目地址:HDU 2089 题意:  中文题意,不解释。 分析: 100w的数据,暴力打表能过先初始化dp数组,表示前i位的三种情况,再进行推算直接dfs,一遍搜一变记录,可能有不饥渴的全部算和饥渴的部分算情况,记录只能记录全部算(推荐看∑大的详细题解Orz) 代码:  1. 暴力 (以前写的)

水果君の日常 9355

Python数据清洗实战:用RapidFuzz搞定模糊匹配(附完整代码示例)

本文详细介绍了在Python数据清洗中,如何利用RapidFuzz库高效解决字符模糊匹配难题。通过实战代码示例,演示了从处理拼写错误、格式不一致的脏数据,到构建实体对齐与记录去重的完整清洗管道,帮助开发者提升数据质量与处理效率。

pear55的博客 532

Transformer代码(Pytorch实现和详解)!!!

这个是第一版,有些代码如果不对,欢迎在评论指正,后续会慢慢改,我也是刚接触transformer,若有些地方理解不对还请指正。

xml的博客 5612

几个基础数位DP (hdu 2089,hdu 3555 ,uestc 1307 windy 数)

转载请注明出处,谢谢 http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents           by---cxlove 做了几个非常基础的数位DP,很水。弱爆了,接下来要进行进阶训练了 HDU 2089 不要62 http://acm.hdu.edu.cn/showproblem.php?pid=2089 不能出现4,或者相邻的62,这

窝不是爱酱,喵~~~~ 1万+

第十六届蓝桥杯大赛软件赛(编程类)知识点大纲

难度:[1-3]难度:[1-5]难度:[1-3]难度:[2-5]难度:[1-5]

Future_yzx的博客 4113

不要62 HDU - 2089 (数位d'p)

不要62 HDU - 2089 题意:给出L和R,问在L到R区间内有多少数,数内没有4和62. 思路:这道题的数据范围不是很大,可以直接打表,但是也可以按照数位dp的做法,p[len]记录数的每一位。dfs()进行搜索,len表示当前到哪一位,six表示前一位是不是6,flag判断这个数是不是边界数,记录已经搜索的dp[len][six]. 对于搜索2358 当前在3的时候 对于那个fo...

DeathYmz的博客 1459

matlab 受约束的 Delaunay 三角剖分【2025最新版】

matlab内置调用函数实现受约束的 Delaunay 三角剖分并将结果保存为STL文件

点云侠的博客 1875

PyRoki 入门教程(二)安装与使用

PyRoki是一个用于机器人运动学优化的Python库,具有模块化设计、可扩展性和跨平台支持等特点。它支持逆运动学、轨迹优化和动作重定位等任务,采用Levenberg-Marquardt优化器提高效率。主要功能包括:基于URDF的可微分正向运动学模型、自动生成碰撞基元、通用成本因子和自定义成本函数等。PyRoki支持CPU、GPU和TPU运行,适用于从单机器人到大规模并行处理场景。目前存在一些限制,如仅支持软约束、静态形状和特定关节类型等。官方提供了多个应用示例,包括基础逆运动学、碰撞检测、轨迹优化和手部/

机器人控制与仿真应用 1251

【数位DP】 hdu2089 不要62

不要62 题目:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:问在n,m之间不含4和62序列(4和62为不吉利数)的数字有多少个。 题解:把状态分为3种,1)不包含不吉利数且末位不为6。2)不包含不吉利数且末位为6。3)包含不吉利数。 状态转移见代码注释。              ps:不看讨论说这题打表也能过。 代码: #i

Ted's 游乐园 4768

【QGIS】软件下载安装及GIS4WRF插件使用

【QGIS】软件下载安装及GIS4WRF插件使用

WW、forever的博客 1799

[HDU-2089] 不要62(数位dp模板题)

题目链接: 不要62 大致题意: 给一个区间,统计区间中不含4和62的数字个数 解题思路: 对于1e9的数据,可以用数位dp来做 对于区间求个数,通常套路是dp®-dp(l-1)求[l,r]区间的数字个数 f[i][j] 表示填到第i位,当第i位填j的时候有多少种合适的数字 分解每一位,从最高位开始判断,累加上所有满足条件的数字个数 特判一下0 AC代码: #include<iostream> #include<algorithm> #include<cstring&gt

qq_49494204的博客 543

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数位DP入门 —— hdu2089 不要62

数位DP是一种用来计数的DP, 如果给你一道题, 让你去统计区间[l, r]之间满足某种条件的数字个数, 在没接触数位之前很容易想到的就是暴力判断。但当数据范围较大时这种方法就不可行了, 这时候我们就可能要用的差分的思想确定一个递推关系, 来更方便更高效的求解, 这就是数位DP。这种理论的东西可能写出来帮助不大, 数位DP的思想是通过自己对问题的思考逐渐建立的, 下面是我选的一个例题来帮助初步理解...

Kruskal的博客 497

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数位dp——hdu2089不要62

刚开始接触数位dp,看其他的博客和教程也不是很懂,不过学习就是一个循序渐进的过程嘛๑乛◡乛๑ 下面简单写写入门级的hdu2089不要62 中途找到一个比较好的ppt,我觉得讲的还是很清楚的了->初探数位dp (下面的过程咋一看不明白可以把中间的过程打印出来,我是这样做的,感觉初学很见效) 1、预处理 dp[i][j]代表首位为j的i位数里符合条件(不含62和4)的数的个数...

187

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【数位DP】HDU 2089 不要62

HDU 2089 不要62 题意: 求[n, m]中没有连续62并且没有4的数的个数。 其中n和m的范围是1e6 解: 其实最关键的部分就是dfs的部分。 首先我们将每个数位的值保存在一个数组里。 解释一下dfs参数的意义: pos:第几个数位。例如100,pos分别为2,1,0 pre:高一位数位的值。例如67,数位0的高一位数位是1,值为6。(它存在的意义是因为62连续是不合法的) st...

L_X_ 236

数位DP 记忆化搜索 不要62HDU2089(java实现)

数位dp数位dp = dfs + 记忆化主要思路HDU2089 AC代码 数位dp = dfs + 记忆化 主要思路 1.dfs本是暴力解决问题的一种方法,数位dp是利用动态规划是思想把以前搜索过的过程记录下来,如果到下一次需要这个结果是就可以直接返回这个值,不需要再从新计算了 2.一般我们是从高位往低位搜索,如果我们需要的结果dp数组里面有我们就不需要从新计算了,如果搜索到了个位就返回一(就是...

changaspl 589

DP - 数位DP - SCOI 2009 - Windy数 + HDU 2089 - 不要62

DP - 数位DP - SCOI 2009 - Windy数 + HDU 2089 - 不要62 文章目录DP - 数位DP - SCOI 2009 - Windy数 + HDU 2089 - 不要621、SCOI 2009 - Windy数2、HDU 2089 - 不要62 1、SCOI 2009 - Windy数 Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 2...

njuptACMcxk的博客 250

HDU2089不要62

题目链接:HDU2089不要62 这道题目没有做出来,看来题刷的还不够。问题大致意思是:给出整数区间,求出在区间中的数不含4和62的个数。 一开始我觉得这道题目挺简单的,一来就暴力求解,结果超时,实在不知道怎么改,后来参考了大佬的初学数位DP–hdu 2089才对数位dp有所了解。 下面我们以[ 0 , 3548 ]这个区间来了解数位dp 这与数位区间有关,不能暴力求解,必须在数位上进行递推操作等。 要知道:两个数在进行比较时,我们是从两个数的高位到低位的顺序(如果顺序相反则不行)依次进行比较,当一个数a的

HXZ_CREATE的博客 424

HDU 2089 不要62(数位dp)

目录问题分析状态转移从低位到高位从高位到低位状态设计位最大值代码 问题 HDU 2089 不要62(数位dp) - https://acm.hdu.edu.cn/showproblem.php?pid=2089 分析 状态转移 从低位到高位 注意:图中的最高位是指当前已构造部分的最高位,并非指最终的最高位 #mermaid-svg-gT0VoKIyjP1R8RuS .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--me

jpphy0的博客 209

HDU 2089 不要62

HDU 2089 不要62 题目链接 题目大意: 给定一个区间,求区间有多少个数满足下列条件: 数字没有出现连续的 62 数字中没有出现 4 有多组测试数据 思路: 直接暴力模拟是超时,因为有多组。 这题也是数位dp的一道简单题, 所以可以直接数位dp做 代码: #include <bits/stdc++.h> using namespace std; #define me(a, b) memset(a, b, sizeof(a)) #define IOS() ios::sync_with_

想学开哥的博客 203

数位DP——HDU2089 不要62

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目大意: 给定一个闭区间n-m,求取该区间中吉利数字的个数。吉利数字的定义为:不包含连续的数字62和数字4。(n,m 解题思路1: 由于m和n是小于100万的所以可以采用暴力打表的做法。 解题思路2: 典型的数位DP。 dp[i][0] 表示i位数

sanmingzi3344的专栏 1016

POJ3253 Round Numbers + HDU2089 不要62 —— 数位DP

POJ3253 :http://poj.org/problem?id=3252 HDU2089:http://acm.hdu.edu.cn/showproblem.php?pid=2089 数位DP: 题目的一般形式为:求 [ L, R ] 范围内满足限制条件的值的个数。 而 [ L, R ]  = [ 0 , R ] - [ 0, L-1 ] ,所以做法就是分别求出 在R

A man can be destroyed, but not defeated. 610

杭电不要62java,【Hdu2089】不要62(数位DP)

Description题目大意:给定区间[n,m],求在n到m中没有“62“或“4“的数的个数。如62315包含62,88914包含4,这两个数都是不合法的。0Solution数位DP,首先预处理数组\(F[i][j]\),表示位数为\(i\),开头为\(j\)时,满足条件的数的个数对于区间\([l,r]\)转化为求\([0,r]-[0,l)\)即可对于区间\([0,n]\)将n按位数存储分别计算...

weixin_33506900的博客 542

数位dp 之 不要62(数位dp入门题)

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

kitalekita的博客 744
上一篇: ZOJ 3762 Pan's Labyrinth (点集中的最大点-线距&技巧性枚举)
下一篇: Codeforces Round #235 (Div. 2) / 410D Roman and Numbers (带有整除性质的数位DP)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值