随笔分类 -  dp

摘要:嘟嘟嘟 这题有那么难???? 提供一个吊打std的做法 直接令$dp[i][j][0/1]$表示前$i$个数的和模$p$为$j$,且这$i$个数中没有/有质数的方案数。 先想一下暴力,枚举第$i$个数是哪一个,然后根据这个数是否是质数转移即可。复杂度$O(nmp)$。 优化: 发现$n \leqsl 阅读全文
posted @ 2019-07-03 21:05 mrclr 阅读(216) 评论(0) 推荐(0)
摘要:嘟嘟嘟 水题一道,某谷又恶意评分。 合并无非是将两棵树的直径的中点连一块,记原来两棵树的直径为$d_1, d_2$,那么新的树的直径就是$max(d_1, d_2, \lceil \frac{2} \rceil + \lceil \frac{2} \rceil + 1)$,用并查集合并,更新即可。 阅读全文
posted @ 2019-06-09 14:32 mrclr 阅读(220) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这种复杂的概率大题我果然是每做出来…… 然后我找到了一篇极棒的题解,小学生都能看懂(大佬就是大佬啊):题解 P4284 【[SHOI2014]概率充电器】,第二次dp的状态方程真的很妙啊。 刚开始我总按照套路想设$dp[u]$表示$u$的子树的期望,看完题解后发现这是没有依据的,因为每一个元 阅读全文
posted @ 2019-06-09 11:08 mrclr 阅读(238) 评论(0) 推荐(0)
摘要:[没有嘟嘟嘟,权限题] 我们dp,令$dp[i]$表示选若干个集合,交集为$i$的方案数,则$dp[i] = C_ ^ * (2 ^ {2 ^ {n - i}} - 1)$。就是说我们先强制选$i$个,有$C_ ^ $个选法,然后剩下的随便选,于是就产生了$2 ^ {n - i}$个集合,从这些集合 阅读全文
posted @ 2019-06-06 20:30 mrclr 阅读(236) 评论(0) 推荐(0)
摘要:嘟嘟嘟 题中给的$k$有点别扭,我们转换成$a > b$的对数是多少,这个用二元一次方程解出来是$\frac{n + k}{2}$。 然后考虑dp,令$dp[i][j]$表示前$i$个数中,有$j$对满足$a > b$的方案数,转移的时候考虑这一组是否满足$a > b$即可:\(dp[i][j] = 阅读全文
posted @ 2019-06-05 19:05 mrclr 阅读(198) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这题自己搞了个dp,然后卡空间一上午终于过了…… 令$dp[i][j]$表示深度为$i$,这一层有$n * j$个节点的$n$元树的个数。然后我们枚举上一层的节点个数进行转移:\(dp[i][j] = \sum _ {k = 1} ^ {n ^ {i - 2}}dp[i - 1][k] * 阅读全文
posted @ 2019-06-02 15:20 mrclr 阅读(197) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 做了一天容斥的题,感觉做过和这题类似的,于是就一直往容斥想。 然而正解可以不用容斥,看来自己的思维被限制了…… 直接dp,令$f[i][j][k]$表示前$k$种颜色的棋子占领任意$i$行$j$列的方案数,转移的时候就枚举第$k$种颜色能占领多少行和多少列。因此我们需要先预处理另一个dp 阅读全文
posted @ 2019-06-01 14:49 mrclr 阅读(171) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这题刚开始把$17!$想成了$2 ^ {17}$,以为全排暴力枚举就行,然后写一半发现好像只能过$n \leqslant 10$的点。 讨论正解之前,我们先想状压dp,毕竟这个数据范围就像状压。$dp[i][j][S]$表示点$i$所在子树中,$i$对应$j$,子树的对应情况为$S$时的方案 阅读全文
posted @ 2019-05-30 09:07 mrclr 阅读(206) 评论(0) 推荐(0)
摘要:嘟嘟嘟 谁说CQOI的题都是板儿题,我就觉得这题挺难的…… 看到数据范围这么小,就会想状压。然而$2 ^ {28}$肯定过不了。不过对于所有的极小值的格子,最多不会超过8个,所以我们状压选了哪些局部极小值的格子(坑儿)。 然后我们从小到大填数,那么对于一个数$i$,他无非就两种填法:填入一个坑,或是 阅读全文
posted @ 2019-05-29 13:44 mrclr 阅读(298) 评论(0) 推荐(0)
摘要:(没有嘟嘟嘟) 权限题,请各位自己想办法交。不过代码正确性是可以保证的,至于为啥那不能说。 刚学完卡特兰数,就给我这种神题,我除了知道$n$个点的不同形态二叉树的数目是卡特兰数外,别的就不会了。 所以又去学了博弈论(以前学过,弃了)。 首先这道题叫“树上删边游戏”,然后有一个结论:一个节点的sg函数 阅读全文
posted @ 2019-05-22 17:24 mrclr 阅读(262) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 关于这题为什么逆推想了半天。 看数据范围就很容易想到状压,令$dp[i][S]$表示第$i$轮,选取宝物的状态为$S$时的期望得分。 但是这样用刷表法递推的时候,会产生一些凭空的状态。又考虑到终止状态是已知的,即每一个$S_i$都可能是终止状态,所以我们逆推。这样答案就是$dp[1][0 阅读全文
posted @ 2019-05-20 17:08 mrclr 阅读(147) 评论(0) 推荐(0)
摘要:"vjudge嘟嘟嘟" 看一眼数据范围,发现可以状压。 转移的话,就枚举接下来抽哪一张卡,发现可能转移到别的状态,可能还是这个状态。把方程列出来移项,就变成了$a x_i = 1 + p_j x _j + p_k x _ k + \ldots$。然后我们逆推即可。 时间复杂度$O(2 ^ n n)$ 阅读全文
posted @ 2019-05-20 15:26 mrclr 阅读(112) 评论(0) 推荐(0)
摘要:嘟嘟嘟 看到数据范围很小,就可以暴力$O(n ^ 3)$dp啦。 我们令$dp[i][j][k]$表示这三种人分别剩$i, j, k$个的概率。然后枚举谁挂了就行。 这里的重点在于两个人相遇的概率是多少,拿$i, j$举例,乍一看是$\frac{i * j}{(i + j + k) * (i + j 阅读全文
posted @ 2019-05-20 12:51 mrclr 阅读(120) 评论(0) 推荐(0)
摘要:嘟嘟嘟 友情提示:数据把$hp1$和$hp2$弄反了! 进入正题。 这题还是比较好想,令$dp[i][j]$表示第一个人赢了$i$场,第二个人赢了$j$的概率,转移就是分别考虑这一场谁赢了。 所以我们要预处理两个人赢的概率。显然有$winA = \sum _ ^ 6 \sum _ ^ {i - 1} 阅读全文
posted @ 2019-05-19 09:10 mrclr 阅读(256) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 首先这题虽然不是很难,但是黄题是不是有点过分了……好歹算个蓝题啊。 手玩样例得知,这哥们儿瞬移到的城市$A$一定是这些被攻击的城市构成的树的一个叶子,然后他经过的最后一个城市$B$和$A$构成的链一定是这棵新构成的树的直径(突然想到虚树)。 别激动,这题根本不用虚树。 我们只用求一遍树的 阅读全文
posted @ 2019-04-29 17:43 mrclr 阅读(240) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题有点意思。 手玩得知,连上一条边后,形成的环只用走一次,剩下的还要走两次。 因此$k = 1$就是求树的直径。 $k = 2$怎么办咧?也是先求一遍树的直径,然后我就想,连上端点后就变成了一个基环树,我们要在这个基环树上再连一条边,使(新形成的环的长度) (与原环相交长度)尽可能大。 阅读全文
posted @ 2019-04-29 16:23 mrclr 阅读(249) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题跟[APIO2014]序列分割极像,做法也几乎相同。 首先令$dp[i][j]$表示前$i$个数分为$j$段的最小方差,转移方程也很简单,就是枚举和上一段的分割位置。 唯一恶心的就是化简式子。 大力推方差式子后,得出了这个东西: $$ns ^ 2 = \sum _ {i = 1} ^ 阅读全文
posted @ 2019-04-25 14:09 mrclr 阅读(250) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 复习一下斜率优化,感觉已经忘得差不多了…… 这题切入点在与 答案跟切的顺序无关 。 证明就是假如有三段权值分别为$x, y, z$,那么这两刀不管按什么顺序切,得到的结果都是$xy + xz + yz$。 然后就可以dp。 令$dp[i][j]$表示前$i$个数切$j$刀的最大得分,于是 阅读全文
posted @ 2019-04-25 10:00 mrclr 阅读(195) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这题当时没想出来(因为本人实在不太擅长计数),然后又被luogu的第一篇题解吓怕了,就咕了一小段时间再写。 其实这题不是很难。 做法就是基础容斥+NTT。 首先出现$S$次的颜色最多有$N = min { \frac, m }$种。 我们令$dp[i]$表示出现$S$次的颜色至少有$i$种的 阅读全文
posted @ 2019-04-02 22:14 mrclr 阅读(167) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 昨天模拟T2 lba和dukelv都说和这题特别像(然而他俩还是没做出来hhhh),我今天一看,果不其然,大体思路都一样。 但自认为这题比模拟题要难一些,自己也是因为没有彻底理解浪debug了半天,导致费了很长时间。 当$n \leqslant 30$时,因为质数只有最多10个,所以可以 阅读全文
posted @ 2019-04-02 16:08 mrclr 阅读(172) 评论(0) 推荐(0)