| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 1589 不要 62(LOJ10167) 数据弱暴力100分 数位DP 局部的记忆化搜索 -> 正文阅读 |
|
[数据结构与算法]1589 不要 62(LOJ10167) 数据弱暴力100分 数位DP 局部的记忆化搜索 |
1.暴力方式 枚举,分析出每位上数据,统计4,统计62情况,总数扣除不符合的数据,就是有效数据。 ybt 通过
LOJ ?暴力代码如下:
2.数位DP 以下内容,可以结合后续的AC代码进行阅读。 dp[pos][pre]代表的是什么意思? pos表示当前遍历的是第几位,pre表示前一位是几 记搜过程从起点向下搜索,到最底层得到方案数,一层一层向上返回答案并累加,最后从搜索起点得到最终答案。 对于[l,r]区间问题,我们一般把他转化为两次数位dp,即找[0,r]和[0,l?1]两段,再将结果相减就得到了我们需要的[l,r] 状态设计如果理解了上述过程,我们需要考虑的就是怎样判断现在在哪一层,怎样判断当前的状态——这就需要我们传进一些参量。 dfs函数需要哪些参量?
最高位标记limit我们知道在搜索的数位搜索范围可能发生变化; 举个例子:我们在搜索[0,567]的数时,显然最高位搜索范围是0~5,而后面的位数的取值范围会根据上一位发生变化:
为了分清这两种情况,我们引入了limit标记:
我们设这一位的标记为limit,这一位能取到的最大值为res,则下一位的标记就是i==res&&limit(i枚举这一位填的数) dp值的记录和使用最后我们考虑dp数组下标记录的值 本文介绍数位dp是在记忆化搜索的框架下进行的,每当找到一种情况我们就可以这种情况记录下来,等到搜到后面遇到相同的情况时直接使用当前记录的值。 dp数组的下标表示的是一种状态,只要当前的状态和之前搜过的某个状态完全一样,我们就可以直接返回原来已经记录下来的dp值。 再举个例子 假如我们找[0,123456]中符合某些条件的数 假如当我们搜到1000??时,dfs从下返上来的数值就是当前位是第1位,前一位是0时的方案种数,搜完这位会向上,这是我们可以记录一下:当前位第1位,前一位是0时,有这么多种方案种数 当我们继续搜到1010??时,我们发现当前状态又是搜到了第1位,并且上一位也是0,这与我们之前记录的情况相同,这样我们就可以不继续向下搜,直接把上次的dp值返回就行了。 注意,我们返回的dp值必须和当前处于完全一样的状态,这就是为什么dp数组下标要记录pos,pre等参量了。 最重要的来了———————————————————— 接着上面的例子,范围[0,123456] 如果我们搜到了1234??,我们能不能直接返回之前记录的:当前第1位,前一位是4时的dp值? 答案是否定的 我们发现,这个状态的dp值被记录时,当前位也就是第1位的取值是[0,9],而这次当前位的取值是[0,5],方案数一定比之前记录的dp值要小。 当前位的取值范围为什么会和原来不一样呢? 如果你联想到了之前所讲的知识,你会发现:现在的limit=1,最高位有取值的限制。 因此我们可以得到一个结论:当limit=1时,不能记录和取用dp值!
有limit=1限制的怎dp[pos][pre]么办呢?每次都重新算。 ybt 通过
LOJ ?数位DP代码如下:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 9:45:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |