随笔分类 - dp
摘要:"嘟嘟嘟" 由于一些知道的人所知道的,不知道的人所不知道的原因,我来发NOIP2018day2T3的题解了。 (好像我只是个搬运工……) 这题真可以叫做NOIplus了,跟其他几道~~比较水的~~题果然不一样,无论代码量还是思维难度都有一个更高的层次。 我是看了zhoutb的题解的。~~而且抄了他代
阅读全文
摘要:"嘟嘟嘟" 因为一些知道的人所知道的,不知道的人所不知道的原因,我来~~改~~写今年的NOIP了。 现在看这题,心中满是疑问:我当时是多么的zz,这种水题为啥没做出来…… 不管了,说正事。 先考虑部分分。 1.$n \leqslant 15$ 不会。 2.$m = 1$ 带权树的直径啊。树形dp一下
阅读全文
摘要:嘟嘟嘟 这题大家应该都做过,就是暴力dp+单调队列优化。 dp方程其实很好想,最初是这样的:dp[t][i][j]表示时刻$t$后,走到$(i, j)$格子的最远路程,于是就有: \(dp[t][i][j] = max\{ dp[t - 1][px][py] \} + 1\) 但这是$O(Tn ^
阅读全文
摘要:"嘟嘟嘟" 这道题dp虽然不难,但是我还是没推出来,感觉最近脑子不太好用啊。 于是就跑去问神仙gjx(全国前三!)了。(外出集训真是好) 神仙不愧是神仙,一会儿就想出来了,而且方法还比网上的题解好懂。 dp[i][j]表示用值域为[1, i]的数,凑出的所有合法序列的值的和。 然后规定序列必须是严格
阅读全文
摘要:"嘟嘟嘟" 既然让求前$k$优解,那么就多加一维,$dp[j][k]$表示体积为$j$的第$k$优解是啥($i$一维已经优化掉了)。 考虑原来的转移方程:dp[j] = max(dp[j], dp[j c[i]] + v[i])。 现在多了一维,那么dp‘[j][k]就分别从dp[j][]和dp[j
阅读全文
摘要:"嘟嘟嘟" 首先这一眼看出来,要树形dp。 然后发现状态不好设,刚开始我想的是dp[i][j]表示以$i$为根的子树,选了$j$个黑点的最大价值。结果就不会转移了。 转移的时候想考虑$$这一条边的贡献,但是发现这个状态的转移所涉及的不只是这一条边,还有子树中的边,于是就彻底gg了。 还是看了题解。
阅读全文
摘要:"嘟嘟嘟" 这题就是一道矩阵加速dp的水题,dp式都给你了,所以矩阵这方面就不说了。 之所以发这篇博客,是因为两数相乘可能会爆long long,所以得用快速乘。 现学了一下,感觉和快速幂特别像。 对于两个数$a, b$,按位枚举$b$,如果$b$的第$i$位为$1$,答案就加上$a 2 ^ i$。
阅读全文
摘要:嘟嘟嘟 懒的写博客了,恰好发现自己的思路跟某一老哥极其像,所以各位还是看这篇博客吧 写的CDQ分治,感觉不是很懂,以后还得再复习一遍。 #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<c
阅读全文
摘要:"嘟嘟嘟" 刚开始推了一个$O(n ^ 2)$的dp方程,但是需要倒着来,然后斜率优化的时候出现了各种错误,最终还是放弃。 换一个正着来的吧。 令$dp[i]$表示在$i$建仓库时的最小花费,则 $$dp[i] = min _ {j = 0} ^ {i} \{dp[j] + \sum _ {k =
阅读全文
摘要:"嘟嘟嘟" 这道题dp式特别好想: $$dp[i] = max_{j = 0} ^ {i 1} (dp[j] + f(s[i] s[j]))$$ 其中$f(x) = ax^ 2 + bx + c$,$s[i] = \sum_{j = 1} ^ {i} x[j]$。 但是$O(n ^ 2)$过不了,需
阅读全文
摘要:"嘟嘟嘟" 如果常规dp,$dp[i][j]$表示前$i$个任务分$j$组,得到 $$dp[i][j] = min _ {k = 0} ^ {i 1} (dp[k][j 1] + (s j + sumt[i]) (sumc[i] sumc[k]))$$ 复杂度是$O(n ^ 3)$的。 因此我们要换
阅读全文
摘要:"嘟嘟嘟" 一句话题意:求带权基环树森林中每一个联通块的最长路之和,路径为简单路径。 其实这道题不难,只不过是吧好多知识拼接在了一起。 看到基环树,就会想到断环为链,为了能枚举到所有路径,要把链翻倍乘2。 现在得到了一个序列,上面的每一个点表示外向树的树根。 那么一条最长路可能有两种情况: 1.单独
阅读全文
摘要:"嘟嘟嘟" 只要会决策单调性,这题就是练手的 首先按矩形长排序,这样只用考虑宽了。 然后很容易搞出dp方程 $$dp[i] = min _ {j = 0} ^ {i 1} (dp[j] + x[i] max_{k = j + 1} ^ {i} y[k])$$ 找max可以用st表达到$O(1)$。
阅读全文
摘要:"嘟嘟嘟" 决策单调性dp。 首先dp方程很好想 $$dp[i] = min_{j = 0} ^ {i 1} (dp[j] + w(j + 1, i))$$ 其中$w(i, j) = (i j + \sum _ {i = l} ^ {j} C_i L) ^ 2$ 但是我不会四边形不等式,于是打表,发
阅读全文
摘要:"嘟嘟嘟" 令$dp[i]$表示到第$i$个数时的答案,很容易列出: $$dp[i] = dp[i 1] 10 ^ {num[i]} + (i 1) + 1$$ 其中$num[i]$表示$i$的位数。 然后看数据范围,知道这一定得用矩乘优化。可是$num[i]$是一个变量啊,这怎么办。 A了后我问坐
阅读全文
摘要:"嘟嘟嘟" 第一问是数位dp。因为我既不会数位dp也不会记搜,所以就抄了份儿代码。这个坑有时间一定要填。 第二问矩乘优化斐波那契。 没了。 (~~好像啥也没讲~~)
阅读全文
摘要:嘟嘟嘟 这道题刚开始我连dp方程都没设出来,现在想一想还是我对dp的理解不够深。 令$dp[i][j]$表示长串匹配到第$i$位,短串匹配到第$j$位时的方案数。因为题中说不让匹配成功,所以答案是$dp[n][m - 1]$。 但转移不好写,因为这个状态不够具体。应该在加一个条件:长串$s$[$1$
阅读全文
摘要:嘟嘟嘟 我dp真是太弱了,这么简单dp都不会。 令dp[i]表示前 i 头牛头被遮住了的最低成本。则dp[i] = min{dp[i], dp[j - 1] + c[a[i] - a[j] + 1]} (1 <= j <= i) 然后别忘了预处理后缀最小值。 1 #include<cstdio> 2
阅读全文
摘要:嘟嘟嘟 这道题只要树形dp做的熟练的话就能秒(显然我不能)。 令dp[u][0 / 1]表示u所在的子树和u相连的联通块没有/有敌人的最少代价。而且按题中所述,这个联通块只能有1个敌人。 分情况: 若敌人在节点u: 则dp[u][0] = INF,dp[u][1] = Σmin{dp[v][0],
阅读全文
摘要:嘟嘟嘟 如果把毛毛虫的毛都剃下去,那么就是求树的直径。现在加上毛,也可以仿照树的直径树形dp的做法。 在dfs的时候开两个变量,分别维护以u为端点的最长链Max1和次长链Max2,然后像求树的直径那样更新即可。 单开一个dp[u]表示在u是的最长链,这个最长链是包含u及其毛的,而上面的不包括,这样方
阅读全文

浙公网安备 33010602011771号