随笔分类 -  dp

摘要:emmmm... 做这题之前强烈推荐先去写一下压位高精度加法,压十八位就行... 然后有一个东西叫序列自动机,其实就是一个指针,用$n*|字符集|$的时空找到每个字符的下一次出现位置 然后如果想找到两个字符串的所有公共子序列只需要在序列自动机上dfs即可 重点看代码: 阅读全文
posted @ 2019-07-08 07:48 lleozhang 阅读(163) 评论(0) 推荐(0)
摘要:这是个假题吧... 首先显然上虚树了 然后我们考虑一下最优策略: 如果虚树两节点都是关键点,那么这两点之间至少选一个 如果一个节点本身是关键点,那么我们必须覆盖下下面所有点 如果一个节点本身不是关键点,那么这个点可选可不选,这一点要基于下面有多少个上来来决定 也就是说,我们在虚树上dfs的过程中需要 阅读全文
posted @ 2019-07-07 21:30 lleozhang 阅读(312) 评论(0) 推荐(0)
摘要:显然dp嘛 首先我们发现,蓝线的连接方式是有限的,具体的,对于每一个节点,其实只有两种可能的连线方式: 第一种:该节点是新来的节点,两个子节点是初始红线的两侧 第二种:该节点是新来的节点,一个子节点和该节点的父节点是红线的两侧 但是,初始是有一个节点的,因此我们考虑进行树形dp时以这个点为根 如果我 阅读全文
posted @ 2019-07-07 20:11 lleozhang 阅读(163) 评论(0) 推荐(0)
摘要:显然dp 考虑每个节点需要考虑的问题: 第一:这个点下面被覆盖的情况 第二:这个点对上面的贡献 据此我们设计状态: $f[i][j]$表示以$i$为根节点的子树中已经覆盖好了下面剩余层,只剩下上面$j$层还没覆盖 $g[i][j]$表示以$i$为根节点的子树中每个点都被覆盖了,而且还能向上覆盖$j$ 阅读全文
posted @ 2019-07-05 21:58 lleozhang 阅读(182) 评论(0) 推荐(0)
摘要:首先我们考虑一个暴力的dp: 我们从小到大加入每个数,当我们加入第$i$个数时,可能产生的逆序对数量是$[0,i-1]$(这个证明考虑把第$i$个数放在哪即可),这样可以列出一个递推式: 设状态$dp[i][j]$表示已经加到了第$i$个数,此时的逆序对个数为$j$,那么有转移:$dp[i][j]= 阅读全文
posted @ 2019-07-04 21:50 lleozhang 阅读(495) 评论(0) 推荐(0)
摘要:首先是动态dp了嘛... 然后考虑怎么做:首先列出dp方程,大概长这样: $f[i]=min(v[i],\sum f[to])$ 看着不太像动态dp呀... 考虑拿出重儿子的贡献,然后套模型,大概能构造出一个这样的东西: 设$g_{i}=\sum f_{to}[to!=son]$ $\begin{p 阅读全文
posted @ 2019-07-02 08:40 lleozhang 阅读(201) 评论(0) 推荐(0)
摘要:去年noip题啊... 这题动态dp裸题,因此直接套上去嘛! 动态dp板子看这里 设状态$f[i][0/1]$表示点$i$选/不选的最小花费,转移有 $f[i][0]=\sum f[son][1]$ $f[i][1]=w_{i}+\sum min(f[son][0],f[son][1])$ 同样设一 阅读全文
posted @ 2019-06-26 20:37 lleozhang 阅读(131) 评论(0) 推荐(0)
摘要:动态dp是一个毒瘤且奇葩的东西... 然而noip2018出了这个东西... 因此... 以一道题为例吧:给出一棵带点权的树,每次修改一个点的点权,查询这棵树的最大权独立集(可以理解为每次询问一遍“没有上司的舞会”) 首先考虑暴力: 设状态$f[i][0/1]$表示以$i$为根的子树,点$i$选或不 阅读全文
posted @ 2019-06-26 19:04 lleozhang 阅读(221) 评论(0) 推荐(0)
摘要:容斥好题 首先我们考虑,如果没有节点之间一一对应的限制,我们可以这样$dp$: 设状态$dp[i][j]$表示以$i$为根节点的子树,节点$i$与节点$j$对应的方案数 那么转移就是$dp[i][j]=\prod_{son_{i}}\sum_{k=1}^{n}map[j][k]dp[son_{i}] 阅读全文
posted @ 2019-06-20 20:06 lleozhang 阅读(238) 评论(0) 推荐(0)
摘要:三倍经验...(然而我并没有氪金所以只能刷一倍...) 考虑在什么情况下两点是合法的: 可以看到,对于红色的点而言,绿色的点是合法的,而黄色的点是不合法的 那么观察一下这几个点的切线把圆分成的这几个弧之间的关系,可以看到:如果两个弧相交但不包含,那么对应的两点合法(比如红色和绿色),剩余情况均不合法 阅读全文
posted @ 2019-06-20 16:32 lleozhang 阅读(248) 评论(0) 推荐(0)
摘要:首先需要知道二项式反演的一个推论:$f(k)=\sum_{i=k}^{n}C_{i}^{k}g(i)$,则$g(k)=\sum_{i=k}^{n}(-1)^{i-k}C_{i}^{k}f(i)$ 然后我们考虑如果糖果多于药片的比药片多与糖果的多$k$个,那么糖果多于药片的个数应该为$\frac{n+ 阅读全文
posted @ 2019-06-19 20:28 lleozhang 阅读(151) 评论(0) 推荐(0)
摘要:计数好题 首先看到这种问题直接想到的应该是polya定理 可是对颜色使用个数有限制啊! 没关系,我们分析一下polya定理的表达式: $\frac{1}{|G|}\sum_{i=1}^{n}m^{c_{i}}$ 可以看到,这其中的每一项等价于用$m$种颜色对每个循环节任意染色的方案数(即对每个循环节 阅读全文
posted @ 2019-06-12 18:05 lleozhang 阅读(204) 评论(0) 推荐(0)
摘要:一道很有趣的题 根据期望的可加性,我们只需计算出每个点实际被使用的概率然后乘上贡献累加即为最后答案 于是问题就转化成了求每个点被使用的概率 我们从头开始分析:对于第一个点,他被使用的概率就是$1-(1-p_{1})^r$ 这一点很好理解,因为每次我们开头就遇到了第一个点,那么第一个点没被用的概率就是 阅读全文
posted @ 2019-06-04 21:15 lleozhang 阅读(174) 评论(0) 推荐(0)
摘要:在做本题之前,你需要一个预备知识:任意模数NTT 如果不会,请看这里 (其实那个不是真正的任意模数NTT,而是一种奇技淫巧,但是...能用就行!) 然后我们来讨论本题 首先不难发现,后来的一个数$A$的二进制表示一定至少有一位上是$1$,且原来的数上这一位都是$0$ 这是很显然的,否则无法满足$B$ 阅读全文
posted @ 2019-06-04 20:23 lleozhang 阅读(321) 评论(0) 推荐(0)
摘要:一道略有难度的dp 设状态$dp[i][j]$表示长度为$i$,开头高度为$j$且为山峰的方案数 考虑到一个序列是对称的,所以总方案数即为$2*\sum_{i=2}^{n}dp[n][i]$ 这样我们只需考虑转移即可 首先,我们发现,如果两个数$i$与$i+1$不相邻,那么交换这两个数之后方案数不变 阅读全文
posted @ 2019-06-03 20:49 lleozhang 阅读(151) 评论(0) 推荐(0)
摘要:首先很容易看出这是一个树上多重背包问题 设状态$f[i][j]$表示以$i$为根的子树中利用的体积是$j$ 但是题目中有要求:选择的点集必须是一个联通块 这要怎么处理? 点分治! 首先我们利用点分治的思想,每次拎起一个根节点进行处理,要求这个根节点必选,然后在子树内进行dp 为了保证根节点必选(至少 阅读全文
posted @ 2019-04-30 11:03 lleozhang 阅读(166) 评论(0) 推荐(0)
摘要:题目描述:这里 发现还是点对之间的问题,于是还是上点分 只不过是怎么做的问题 首先对每条边边权给成1和-1(即把原来边权为0的边边权改为-1),那么合法的路径总权值一定为0! 还是将路径分为经过当前根节点和不经过当前根节点的,对不经过当前点的递归处理 那么我们讨论经过当前根节点的路径算法即可 可以发 阅读全文
posted @ 2019-04-28 18:50 lleozhang 阅读(160) 评论(0) 推荐(0)
摘要:看了好多篇题解才看懂的题,我实在太菜了... 首先根据一个我不知道的算法,可以证明在没有加入新的边的时候,原图的所有生成树的方案数就是所有点(除1以外)的度之积 那么在新加入这条边之后,我们仍然可以这样计算,但是会产生一种问题:就是会出现环! 所以我们需要利用一些容斥,把不合法的情况去掉 接下来我们 阅读全文
posted @ 2018-11-06 09:41 lleozhang 阅读(157) 评论(0) 推荐(0)
摘要:非常好的一道题 看到这道题,肯定能想到概率dp,但是状态的设计与转移都是一个难点 如果正向模拟来设计状态,那么不难发现是很难以转移的 所以我们考虑反向模拟,用类似博弈的方法来转移 不难发现,如果只剩了最后一个人,那么这个人获胜的概率是1 而如果只剩两个人,我们完全可以通过摸牌的情况算出每个人的胜率( 阅读全文
posted @ 2018-11-06 08:16 lleozhang 阅读(126) 评论(0) 推荐(0)
摘要:非常好也是比较难的题 首先,不难看出这是一道树形的概率dp 那么我们就要考虑转移 我们发现,一个点能充上电的概率是这个点本身通电的概率+这个点的子节点给他传过来电的概率+这个点的父节点给他传过来电的概率 但是这里的加法都是概率的加法,也就是说满足如下公式: 那么如果是三元事件,这个公式会更为复杂,所 阅读全文
posted @ 2018-11-06 08:06 lleozhang 阅读(148) 评论(0) 推荐(0)

levels of contents