| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> DP动态规划C/C++ (必懂) P1091 [NOIP2004 提高组] 合唱队形 1259:【例9.3】求最长不下降序列 P1255 数楼梯 1837:【04NOIP提高组】合唱队形 -> 正文阅读 |
|
[C++知识库]DP动态规划C/C++ (必懂) P1091 [NOIP2004 提高组] 合唱队形 1259:【例9.3】求最长不下降序列 P1255 数楼梯 1837:【04NOIP提高组】合唱队形 |
说起DP,相信点进来的小伙伴们都深受其害 应该很多人和我一样, 导师讲的时候开小差懒得听, 但是课下做题时却一头雾水 所以此篇博客专为想要入门DP的小伙伴们而写,相信大家都能看懂 (如果看懂了就请小伙伴们给我点一个不要钱的赞吧) (下面有投票)目录 #概念#INTRO#START#例题AC#概念DP的概念说实话很难懂反正我是懒得看
#INTRO先来看一道题:(熟练掌握递归的可以跳过)
看过原题的伙伴们可能知道这道题还需要高精, 这里就先不管了 看题我们可以容易地知道:每个楼梯都是由两个或一个楼梯前跳上来的 那么最后一个楼梯(也就是第n个), 就是由n - 1和n - 2上来的 而n - 1是由n - 2和n - 3跳上来的; 同理n - 2是由n - 3 和n - 4跳上来的; 这就是递归; 那么我们就可以写出来以下代码
那么这就是搜索的前身 如果你已经熟练掌握了搜索, 那么我们开始吧 #START如果给你一个无规律序列, 让你寻找最长上不下降子序列, 你会怎么求呢? 首先想到的肯定是爆搜,枚举每一个子数字, 然后存到数组里, 再比较数组的长度 但是这样真的好吗?时间复杂度真的优吗? 这里就要引出 DP了 用爆搜,会走很多重复的路径 就好比数字4, 搜索1的时候走一遍, 走索2的时候再走一遍, 大大增加了时间复杂度 那么我们能不能把以4为开头的最长不下降子序列的长度存到一个下标为4(数字4在序列中的下标也是4)的数组f里, 然后以后每次遍历到它的时候就不搜索后面的数了,直接加上f[4]? 答案是肯定的,如果你明白了这点,那么恭喜你, 你已经初步明白了DP的思想 明白的伙伴们不禁要问了, 那这不就是记忆化搜索吗? 从莫种程度上来说, 这就是深搜?+ 记忆化 我们继续思考, 一点一点推,? 以3为首的? 最长不下降子序列? 的长度是几呢? 很明显, 长度是1(也就是只有他自己)即f[5] = 1; 那么4呢? 因为4小于3, 所以3, 4 不能构成? 不下降子序列? , 那么同理 以4为首的? 最长不下降子序列? 的长度也是1 (同样只有他本身)即f[4] = 1 对于2 可以观察到 2, 4 和2, 3都构成? 不下降子序列? , 而且长度都是2; 很明显f[3] = 2; 继续看5, 没有 所以f[2] = 1; 最最后看数字1,:?1,2和1,3和1,4和1,2,4和1,2,3都是不下降子序列, 那么我们找到其中最长的; 就是f[1] = 3; 注:图片是从0开始的(不要懵了)? 最后我们一个打擂, 找到最长不下降子序列的长度是3; 简单是不是? 贴一下主代码:
那如果现在他题目说让输出最长子序列呢? ?你会怎么做呢? 我们先把题目贴出来:
有点难搞哦 仔细想一想 如果我们再定义一个数组, 以p[i]为例 存储的是以p[i]为首的最长不下降子序列的第二个数的下标 这里再放一下图 以18为例, 以它开头的最长不下降子序列分别为18,19,21,22,63; 第二个数19的下表为10 那么p[8] = 10; 同理p[10] = 11; p[11] = 12; p[12] = 13; 那就太简单了 ?中和上面所说的数组f, 我们就可以得到下面这个表格: ?简单实在是太简单了 (讲这么详细了, 麻烦点一个不花钱的赞吧) 直接贴代码
提交一下, 就AC了!!! #例题下面我们再来看一道例题 (这里就以洛谷为例了)
提高组, 好家伙真水 分析一下: 我们只要找的合唱的最长队形k 再用n - k就得到答案了 至于k,我们只要将每一个数i从1~i的最长上升子序列长度?加上?i~n的最长下降子序列长度就行了 就很简单 贴代码:
然后就AC了很棒对不对? 恭喜你已经掌握了DP的初步思想( 既然都看到这里了(我也写了这么长时间了)就请你点个免费的赞吧 这不仅是对我无限的鼓励, 更是你良好品德的外在表现 谢了 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 12:47:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |