随笔分类 -  dp->dp优化

摘要:treap复习题。 阅读全文
posted @ 2019-06-28 09:09 LiGuanlin 阅读(269) 评论(0) 推荐(0)
摘要:题目描述: 给出一棵$n(n<=200000)$的树。每个点有一个权值$w$,表示堵上这个点的花费。 $m$组操作,操作一为将点$x$的权值加上一个非负整数$d$,操作二为询问以点$x$为根的子树内堵上所有根到叶节点路径的最小花费。 题解: 设$h[x]$为$x$的所有子节点的最小花费之和。 一眼看 阅读全文
posted @ 2019-01-04 10:19 LiGuanlin 阅读(200) 评论(0) 推荐(0)
摘要:题目描述 题解: 一个看起来非常人畜无害的$dp$:$$f[i][k]=min(f[j][k]+cost(j,i))+c[i]$$ 中间那个$cost(j,i)$可以通过$cost(j,i-1)$得到,这个东西是动态的。 用线段树维护一下就好了。 代码: 阅读全文
posted @ 2019-01-04 10:09 LiGuanlin 阅读(141) 评论(0) 推荐(0)
摘要:题目描述 题解: $dp$。 有$$f[r[i]]=min(f[k]+1)$$。 然后用线段树优化转移就好了。 代码: 阅读全文
posted @ 2019-01-04 10:04 LiGuanlin 阅读(121) 评论(0) 推荐(0)
摘要:题目描述 题解: 我们可以考虑这样一种情况,有一块$10*10$的土地,还有一块$1*1$的土地。 当然将$1*1$的土地合到$10*10$的土地中了。 所以我们可以先按土地$x$值从大到小排序,然后从前向后扫一边,只将不会被完全覆盖的放到处理的集合里。 这样就可以$dp$了。 有$$dp[i]=m 阅读全文
posted @ 2019-01-04 09:44 LiGuanlin 阅读(130) 评论(0) 推荐(0)
摘要:题目描述 题解: 这是个多重背包,但是一般的复杂度是过不去这题的。 所以有二进制优化和单调队列优化。 二进制优化是将数量$n$化为多个数,而且这些数能表示出$1~n$中的任意数。 怎么保证? 想起二进制,我们可以将$n$分为$1+2+4+8+……+k$,$k$可以是任意数。 单调队列怎么优化? 我们 阅读全文
posted @ 2019-01-02 07:48 LiGuanlin 阅读(170) 评论(0) 推荐(0)
摘要:题目描述 题解: 应该是个$dp$; $dp[i][j]$表示第$i$个人涂到第$j$块的最大收益。 推一下式子:$$dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i-1][k]+(j-k)*p[i])$$ 对于最后面那个式子可以化一下:$$max(dp[i-1][k] 阅读全文
posted @ 2019-01-02 07:39 LiGuanlin 阅读(122) 评论(0) 推荐(0)
摘要:题目描述 题解: 题目都提示了, 很明显要导一波式子: $$dp[i]=max( dp[i-1] , \frac{ dp[j] } { A[j]*R[j]+B[j] } * (A[i]*R[j]+B[i]))$$ 后面那个东西相当与将第j天的R[j]个A和1个B绑在一起。 $dp[i-1]$没什么好 阅读全文
posted @ 2018-12-29 07:17 LiGuanlin 阅读(198) 评论(0) 推荐(0)
摘要:题目描述 题解: 这位仁兄您点进来的题解是cdq+点分+斜率优化的。 吐草:细节是真多…… 先推一波式子: $dp[i]=min(dp[j]+(dis[i]-dis[j])*p[i]+q[i])=dis[i]*p[i]+q[i]+min(dp[j]-dis[j]*p[i])$ $min()$里面那个 阅读全文
posted @ 2018-12-28 14:02 LiGuanlin 阅读(178) 评论(0) 推荐(0)
摘要:这个是题目描述: 题解: 啊啊啊啊啊…… 垃圾分数规划。 垃圾树链剖分。 垃圾斜率优化。 垃圾darkbzoj。 这里才是题解: 我们设那个分数的值=k,那么有 $(yi-k*xi)+(qj-k*pj)=0$ 我们要做的是让k最大。 那么很明显开两颗线段树,每个节点存一个凸包。 鉴于我们要让b值最大 阅读全文
posted @ 2018-12-21 13:38 LiGuanlin 阅读(214) 评论(0) 推荐(0)
摘要:题目描述 题解: 看起来是个dp。 还需要SAM维护。 还需要单调队列优化。 代码: 阅读全文
posted @ 2018-12-15 10:26 LiGuanlin 阅读(210) 评论(0) 推荐(0)
摘要:题目大意:给出n个数的数列,其中保证1<=ai<=n,使其分成m份,使得每一段字符集大小相加最大,求最大值。 考场上跪了,回来一想发现是线段树维护dp: 原dp:dp[ i ][ j ] = max ( dp[ j ][ k-1 ] + num[ j+1 ][ i ]); 然后发现线段树可以维护,即 阅读全文
posted @ 2018-10-02 11:17 LiGuanlin 阅读(141) 评论(0) 推荐(0)
摘要:题目描述 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场。出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如(i,i+1,...,i+k)的序列。 编号为 i 的士兵的初始战斗力为 xi ,一支特别行动队的初始战斗力 x 为队内 阅读全文
posted @ 2018-09-12 09:13 LiGuanlin 阅读(158) 评论(0) 推荐(0)
摘要:题目描述 Pine开始了从S地到T地的征途。 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站。 Pine计划用m天到达T地。除第m天外,每一天晚上Pine都必须在休息站过夜。所以,一段路必须在同一天中走完。 Pine希望每一天走的路长度尽可能相近,所以他希望每一天走的路的长度的方差尽可 阅读全文
posted @ 2018-09-12 01:51 LiGuanlin 阅读(216) 评论(0) 推荐(0)
摘要:题面: https://www.lydsy.com/JudgeOnline/problem.php?id=1010 一道dp题,需要斜率优化。 代码: P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容 阅读全文
posted @ 2018-09-11 20:53 LiGuanlin 阅读(187) 评论(0) 推荐(0)
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=3437 题干:略。 暴力做法:O(n^2),强行无脑dp。 整解:s1为一维前缀和,s2为二维前缀和(存 b[i]*i) f[i] = min( f[j] + i*(s1[i]-s1[j]) - (s 阅读全文
posted @ 2018-09-10 21:07 LiGuanlin 阅读(117) 评论(0) 推荐(0)