![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
某六十九岁合法萝莉
有那么多优秀的学长,我也好想成为他们中的一员啊....
展开
-
单调队列优化dp和stl双头队列(deque)的使用
例题:最大子序和题目大意:从长为nnn的序列中找到长度不大于mmm的连续子串,使其序列和最大。解法:该题可使用单调队列优化dpdpdp求解,首先,求出序列的前缀和,然后维护一个长度不大于mmm的双头队列,并且保持其是一个单调递增的队列,每次只需要以当前的前缀和与队头的前缀和相减就可以了,因为子序列和为前缀和S[i]−S[j](j<i,j>=i−m)S[i] - S[j](j<i,j>=i-m)S[i]−S[j](j<i,j>=i−m)因此,我们要保证S[j]S[j]S原创 2022-05-18 22:18:46 · 231 阅读 · 0 评论 -
AcWing1072树的最长路径(树形dp)
题目传送门:树的最长路径题意:求树上相距最长的两点间的距离。思路:由于是无向图,每个点都可以当做是树根,因此,随便选一点作为起点,记录父节点保证向下遍历,获得的最长和次长的离树根的距离便是最长距离。难点:题目有两个较难理解的地方,可以画图来理解① 边权为负数的情况如果离树根为负数,舍弃之,如果所有边权皆为负数,答案为零② 如果最长距离不经过当前根的情况当前根向下遍历,其可以遍历到整棵树,如果该根不经过最大距离,那么肯定是其子树上的某一点,由于为其子树,所以无法再遍历到该点,但正因为该点不为最大原创 2022-04-08 20:40:44 · 285 阅读 · 0 评论 -
混合背包二进制优化(伪万能背包模板)
今天在准备背包问题的算法模板时,突然想到上学期遗留下的一道混合背包问题,当时刚接触c语言,遇到这种题自然是一筹莫展,写的背包不是超时就是超空间,也有写过二进制的优化,但都以失败告终,如今看来,此题便是不攻自破了,顺便把它写成了万能的背包模板。题目如下:该题因为数据量较大,要用到优化来解决超时的问题,我选择了二进制优化,把混合背包转化成0-1背包问题。二进制优化的原理十分简单,就是通过二进制拼出自然数的方法将一个多重背包拆成几个0-1背包,例如,7可以拆成1,2,4三个数,这三个数能拼出1-7的所有数原创 2021-06-15 17:42:03 · 265 阅读 · 1 评论 -
最长不下降子序列(复杂度较低的方法)
最长不下降子序列随笔参考文章最长不下降子序列nlogn算法详解最长不下降子序列是动态规划的基础题,通常我们会这样去解它int a[MAXN], d[MAXN];int dp() { d[1] = 1; int ans = 1; for (int i = 2; i <= n; i++) { for (int j = 1; j < i; j++) if (a[j] <= a[i]) { d[i] = max(d[i], d[j] + 1)原创 2021-04-28 15:47:32 · 354 阅读 · 0 评论 -
概率dp入门解题报告两则
概率dp入门解题报告两则刚接触概率dp,看过各位大佬的解题报告后不禁感慨,即便是最简单的dp和其他的一些小技巧结合起来也会变得难以理解(大概是我太蔡了吧…)。对着源码琢磨了数小时后终于获得了一些理解,下面和同学们讲解一下我对这两题的理解。/ * 这是第一题 * /POJ 2096 Collecting Bugs 题目大意:有一位程序员寻找bug,有n种bug存在于s个子系统中,问其集齐所有bug的期望。解题思路:这题比较简单,根据题意写出状态转移方程即可。总共有4种可能:在同一类,同一种;不在同原创 2021-04-08 22:59:09 · 104 阅读 · 0 评论