码迷,mamicode.com
首页 > 其他好文 > 详细

ZR8.2 DP

时间:2019-08-02 21:10:09      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:img   har   state   答案   集合   判断   play   log   bom   

DP

1CF1101D

我们发现,最终答案一定和质因数有关

我们发现\(w_i <= 2*10^5\)级别的树,他的素因子的个数不会非常多(\(<=10\))

然后我们就设

gcd是\(dp_{u,v}\)表示\(u\)节点的第\(v\)个素因子的倍数答案

很明显答案只能从相同的质因子去转移
\[ dp_{u,v} = \max_{p_v = p_{v'}}{(dp_{son_u,v'})} + 1 \]
每次合并子树时利用dp数组更新ans就好了

2 CF1039D

很明显,当\(k > \frac{2}{n}\)时答案是\(1\)或者\(0\)

这种情况提前预处理一下直径就好了

\(k <= \frac{2}{n}\)

我们设\(dp_{i}\)表示\(i\)子树内的最长链

每次在合并时,如果存在长度和大于\(k\)的两条链,我们就贪心合并

这样的话时间复杂度是

\(O(n^2/2)\)

CF开\(7s\)卡卡常吧

接下来想想怎么优化时间复杂度

我们发现

答案是类似于数论分块那样递减的

\(max_{ans} <= \sqrt n\)

技术图片

对于\(\sqrt n\)段中的每一段我们都二分他的边界

每次check就做上面的DP

时间复杂度\(O(n\sqrt nlogn)\)

CF1097G

首先\(k = 1\)时我们有做法

枚举边,计算边的贡献

比如我们当前枚举了\((u,v)\)

那么贡献就是\((2^{size_u} - 1)*(2^{size_v} - 1)\)

但是这种做法只适用于\(k = 1\)

因为我们是枚举了边,判断有多少点集\(S\)满足条件

但是如果\(k>1\),很明显这条边在不同点集的贡献不一定相同,所以上述方法就莫得了

我们先考虑多项式做法

考虑设$dp_{u,v} \(表示\)u\(为根的子树,选了\)v\(条边,且同时满足\)u$点被选择了的方案数

当然,这种情况要考虑的情况有些复杂

要考虑根选不选的情况之类的

这样的树形背包时间复杂度是\(n^2\)

首先
\[ x^k = \sum_{i = 0}^kC_x^i*i!*S(k,i) \]
其中\(S(k,i)\)表示第二类斯特林数,将\(k\)个元素划分成\(i\)个集合(集合是相同的)的方案数
\[ S(i,j) = S(i - 1,j - 1) + S(i - 1,j) * j \]
\(x^k\)其实就是\(x\)球放到\(k\)的个筐里的方案数

右边就是我们强制

我们将原题中的式子带进去
\[ \begin{align} ans &= \sum_{X}\sum_{i = 0}^kC_{f(X)}^i*i!*S(f(X),i)\&=\sum_{i = 0}^ki!S(f(X),i)\sum_{X} C_{f(X)}^i \end{align} \]
然后就掉线了,去问smy

CF 1061 CMultiplicity

我们设\(f_{i,j}\)表示前\(i\)个数长度为\(j\)的方案数

很明显如果选的话\(j\)应该是\(a_i\)的因子

我们\(j\)只需要枚举\(a_i\)的因子

所以时间复杂度\(O(n\sqrt n)\)

CF 886E Maximum Element

咕咕咕去问smy或者mjy

CF1096D

\(f_{i,0,1,2,3}\)表示\(1-i\)组成的子序列,求满足已经有\(s_{0,1,,2,3}\)结尾的子序列的方案数

转移看当前字符是啥就好了

子串的话就把所有连续的h和d压成一个

每次遇到hard贪心就好

CF979E

如果一个图是给你的

直接\(dp_{i,0,1}\)表示到达\(i\)点且

咕咕咕

Hero Meet Devil(HDU4899)

本来\(LCS\)就是一个不太平凡的DP问题

结果我们发现我们总的DP转移时还要用到LCS

之后我们考虑LCS的DP过程

\(a_i = b_i\)
\[ f_{i,j} = f_{i - 1,j - 1} + 1 \]
\(a_i!=b_i\)
\[ f_{i,j} = \max{(f_{i - 1,j},f_{i,j - 1})} + 1 \]
我们发现一个神奇的东西
\[ f_{i,j- 1} <= f_{i,j} <= f_{i,j} + 1 \]
然后我们就可以用差分序列把这个东西给 压起来

考虑外层转移

我们设\(state_{i,j}\)表示在状态\(i\)后面添加字符\(s_j(s_j \in(A,C,G,T))\)将要转移到的状态
\[ dp_{len + 1,state_{i,j}}+=dp_{len,i} \]
发现外层转移就比较简单了

XHXJ’s LIS(HDU4352)

CF1043F

我们发现最终答案不会大于\(7\)。。。。

因为\(2 \times 3 \times 5 \times 7\times11 \times 13 \times 17 >=3\times10^5\)

咕咕咕

ZR8.2 DP

标签:img   har   state   答案   集合   判断   play   log   bom   

原文地址:https://www.cnblogs.com/wyxdrqc/p/11290662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!