![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 75
p__| wYw |__q
这个作者很懒,什么都没留下…
展开
-
最长上升(下降)子序列——导弹拦截的DP解法及单调数组优化
前言相信对于最大上升子序列大家已经不再陌生(不知道的下面我也会介绍),动态规划的方法确实非常好理解,但时间复杂度太高,下面我将会用更短时间复杂度的单调数组来做出这道题。题面题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该...原创 2018-12-19 14:03:18 · 455 阅读 · 0 评论 -
C++剑指offer:树形DP——较简单的树形DP:重建道路
较简单的树形DP问题 M(1288): 【基础算法】重建道路时间限制:1 Sec内存限制:64 MB题目描述一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了Farmer John的牧场。由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的。因此,牧场运输系统可以被构建成一棵树。John想要知道另一次地震会造成多严重的破...原创 2019-03-13 14:04:11 · 351 阅读 · 0 评论 -
剑指offer:C++树上的动态规划——树形DP之背包 LG[P1270]:访问艺术馆
前言此题难度:高难度偏简单。来说下为什么说这道题“高难度偏简单”。如果只看代码的实现以及DP的思路及转移,其实这道题的难道并不是很高。但是这道题的“坑”很多,输入数据的形式也非常变态,对代码实现能力不高的同学简直就是一场煎熬,而且有几个坑也不容易注意到,让我WA了好几次。此题的本质其实也是多重背包,实现起来十分经典,可供初学者参考。题目问题 L(1286): 【基础算...原创 2019-03-12 15:50:02 · 234 阅读 · 0 评论 -
剑指offer:C++树形背包——战略游戏
前言详见树形DP入门题:https://blog.csdn.net/weixin_44049566/article/details/86727140代码#include <iostream>#include <cstring>#include <cstdio>#include <vector>using namespace st...原创 2019-03-11 13:51:38 · 294 阅读 · 0 评论 -
剑指Offer:C++较复杂的树形背包问题(01背包)——有线电视网
前言此题是一道中上难度的树形背包问题。其实质其实就是01背包问题。难点在于状态的转移以及状态转移方程,不同于其他的树形背包题目。应该说很有特点吧,十分适合初学者练练手。没有了解过树形背包的读者可以看看我的这篇博客https://blog.csdn.net/weixin_44049566/article/details/88110155,这样看的时候才不会很困难。题目问题 J(...原创 2019-03-11 13:15:58 · 513 阅读 · 0 评论 -
C++[POJ1849]铲雪车问题——树形DP求出树的直径
[POJ1849]铲雪车问题时间限制:1 Sec内存限制:128 MB题目描述大雪覆盖了整座城市,市政府要求冬季服务部门尽快将一些街道(列在一份清单中)的积雪清除掉以恢复交通。整个城市由许多交叉路口和街道构成,当然任意两个交叉路口都是直接或间接连通的。清单给出了最少的街道,使得这些街道的积雪清除后任意两个交叉路口之间有且仅有一条通路。冬季服务部门有2辆铲雪车和2名司机,这...原创 2019-03-15 14:14:14 · 945 阅读 · 0 评论 -
C++剑指offer:树形DP——河流(riv):较复杂的树形DP 应用多叉树转二叉树的方法
前言先来讲讲我是怎么用四天的时间来做这道题的吧。第一天:看老师的课件,了解了思路,并得知了状态转移方程是如何得出的。第二天:上网查题解,决定不用多叉树转二叉树,用自己的代码打出来。第三天:真香,决定用多叉树转二叉树。第四天:放弃直接动态规划,使用记忆化搜索。这里简单阐述一下我为什么要用多叉树转二叉树与记忆化搜索。第一,如果不用多叉树转二叉树,此题真的会变得非常复杂,不信...原创 2019-03-07 17:30:33 · 320 阅读 · 0 评论 -
剑指offer:C++树形DP基础——二叉苹果树
问题 G(1375): 【基础算法】二叉苹果树时间限制:1 Sec内存限制:64 MB题目描述有一棵苹果树,如果树枝有分叉,一定是分 2 叉(就是说没有只有 1 个儿子的结点)。这棵树共有 N 个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是 1。 我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有 4 个树枝的树:现在这颗树枝条太多了,需要...原创 2019-03-14 14:01:42 · 454 阅读 · 0 评论 -
C++剑指offer:[POJ]2631 Roads in the North - 用树形DP的方式求出一棵树的直径
前言此题是道很简单的题(做法不单一,不仅只有树形DP的方法)做完了这道题才发现此题原来是一道求树的直径的题,也就是求树上两个节点的最大距离。题目问题 N(2692): [POJ2631]北极地区的路时间限制:1 Sec内存限制:128 MB题目描述寒冷、人烟稀少的北极地区修建与维护道路时非常昂贵的。因此,修路时只会在任意两个村子之间形成一条唯一的路径,并且中途...原创 2019-03-14 13:36:49 · 278 阅读 · 0 评论 -
C++高级算法之树形DP——如何找树的重心(包看包懂)
前言最近在学树形DP,感触颇多。下面就写出来了。题目问题 C(2078): 求树的重心时间限制:1 Sec内存限制:128 MB题目描述树的重心定义为树的某个节点,当去掉该节点后,树的各个连通分量中,节点数最多的连通分量其节点数达到最小值。树可能存在多个重心。如下图,当去掉点1后,树将分成两个连通块:(2,4,5),(3,6,7),则最大的连通块包含节点个数为3。...原创 2019-02-12 17:29:41 · 1446 阅读 · 1 评论 -
C++树形DP入门题——Anniversary Party
目录前言题目大意分析代码后记前言发现这个月快完了还没写几篇博客,于是来水水博客hhh这篇博客如果没有树形DP的基础比较难看懂,所以可以先看看这篇博客那么我们就直接切入正题看题面吧。题目大意在一个很强大的公司,有n个职员,每个职员都有唯一一个上司。这些职员在自己那唯一一个上司在时是不会来参加派对的。每个职员有一个开心指数。求来了的职员的最大开心指数。...原创 2019-01-31 23:06:43 · 484 阅读 · 0 评论 -
C++树形DP初级入门题——The Fair Nut and the Best Path
目录前言题目分析代码后记前言许多新人(包括我)在掌握树形DP时都比较困难。此题为树形DP里还算简单的一道题,适合初学者入门。那么,树形DP是什么呢?我们都已经学过了动态规划,也就是DP。树形DP与DP本质上并无区别,它的特点在于DP状态的转移并不是简单的线性上的转移,树形DP状态的转移依赖的是树(图)。题目原题题面上全是废话(还是英文的),所以我直接来解释题...原创 2019-01-31 22:50:57 · 486 阅读 · 0 评论 -
C++剑指offer:四边形不等式优化动态规划(一)——区间DP 线性的合并石子的优化合并石子的变形【HDU-3506】MonkeyParty的题解
前言DP的平行四边形优化,是一个难点,它非常难懂(关于平行四变形的理论基础及证明,有兴趣的同学可以看看这个大佬的博客,虽然我从来不会无聊到看证明),而且我在上课时并没有听太懂,都是看了别人的题解才看懂的。那么,要怎么才能学会平行四边形等式呢,先看看下面这个理论知识,为我们之后的具体优化提供基础。平行四边形优化是什么在日常的做动态规划的题时,我们经常会遇见以下这个状态转移方程(或类似),...原创 2018-12-31 20:26:33 · 304 阅读 · 0 评论 -
C++剑指offer:解题报告之DP优化学习记 (二) ——浅论DP斜率优化 (Print Article 【HDU - 3507】 )
链接:https://share.weiyun.com/5LzbzAc目录前言斜率优化前期准备1.从状态转移方程出发2.推理状态转移方程对结论的进一步推导干货!综合结论判断斜率大小的方法:叉乘正片开始:代码部分后记前言之前我们对DP优化已经有了很多的了解,比如:单调队列优化DP,四边形优化DP。今天,我们要讲的是传说中的斜率优化。它与四边形优化...原创 2019-01-10 14:04:49 · 451 阅读 · 0 评论 -
C++动态规划之背包问题之多重背包求方案数之 : 新年去世(趣事)之打牌 运用递归+数组输出多重背包的路径(用了哪些物品)
此题是一道很简单的多重背包的题。相信只要有点DP基础的同学都可以打出此题的部分解。但此题的重点在于它还要要求输出在到达目标的情况下输出相应的路径。(这种方法是我自己根据以前所学琢磨出来的,可能有点纰漏,见谅。我还没有看过题解,所以知不知道是不是正解)。话说看了看别人的题解,我的这篇博客应该算是比较详细了的吧。原创 2019-01-03 16:02:02 · 1385 阅读 · 0 评论 -
C++剑指offer:[USACO13NOV]POGO的牛Pogo-Cow(弹簧高跷)——通过修改循环的顺序来巧妙地实现对动态规划的优化
前言此题在网上的题解大都解释的比较.......怎么说呢,并不是很容易看懂,所以我觉得还是有必要写一篇比较详细的题解的。此题为一道动态规划的优化题。普遍的做法时间复杂度是,但可以通过修改循环的顺序来巧妙地实现的算法。(此题还有单调队列的做法,具体的做法我还在研究,有空也会发出来)。题目描述洛谷P3089在草场上有一条直线,直线上有若干个目标点。每个目标点都有一个分值和一个坐标。现...原创 2018-12-28 14:11:37 · 365 阅读 · 0 评论 -
修剪草坪 —— 单调队列优化DP基础
最近正在复习DP,于是便来写一发单调队列优化DP。其实单调队列优化DP的方法我的博客写得有但我自己已经忘光了所以才是复习是吧。题目描述在一年前赢得了小镇的最佳草坪比赛后,Farm John变得很懒,再也没有修剪过草坪。现在,新一轮的最佳草坪比赛又开始了,Farm John希望能够再次夺冠。然而,Farm John的草坪非常脏乱,因此,Farm John只能够让他的奶牛来完成这项工作。F...原创 2019-07-21 10:23:58 · 269 阅读 · 0 评论