07 2021 档案
摘要:在期望dp时,我们需要求得每个状态的期望。 在一些题目中,终态不唯一,但是起点唯一。 比如一个机器人每次可以下/左/右走一步,走到最后一行的格子时,走的距离的期望。 如果正推,这样子根据全期望公式,还要计算取得每个状态的概率,不好做、 但是如果倒推,则到起点的状态是唯一的,概率一定是1。
阅读全文
摘要:发现自己学习的换根dp全是假的。 我们在换根dp时,第一次dfs考虑处理出任意一个根的答案。 第二次dfs时,我们当前节点为x。 我们考虑求出x的某个儿子v的答案,从v回到x后再求出以x为根的答案。 这需要在O(1)的时间内更新dp值。 视情况用set/加减法/维护最大次
阅读全文
摘要:CF1540D (自己做出) 把b_i=i-b_i-1,b_i变成前面小于i的数的个数。 如果得知b_i,求出原序列的方法:顺序扫描整个数组,在序列的第b_i个数前插入i。 第i个位置的权值是序列的值为i的数的排名。 发现我们只需要关心p_i的值,所以过程可以改为
阅读全文
摘要:streduc (自己做出) 因为字符串拼接,从左到右考虑不太行。 把所有|S|集合都插入trie内 考虑把字符串消除过的点的连续段拿出来。 设f_{l,r,p}\(表示原串\)[l,r]区间,外部恰好有一个串,走到trie的p节点,是否可行。g_{l,r}\(表示\)[l,r]是否
阅读全文
摘要:简单题。 看代码。 #include<bits/stdc++.h> using namespace std; #define N 200010 #define M 200010 int h[M],nxt[M],v[M],w[M],s,t,dep[M],ec,n,k; char st[1000][10
阅读全文
摘要:简单题 快速计算摆放棋子攻击对数的方法:拿出每个行/列连续段,设它有p个点。 则ans+=\frac{p(p+1)}{2} 一个棋子会让它所在的行/列连续段贡献+1。 用一条路径进行限制。 \frac{p(p+1)}{2}可以拆边。 具体看代码。 做了这么久发现看错题了,口可 #incl
阅读全文
摘要:拟阵的一个应用... 如果没有字典序限制,显然可以用费用流解决。 给右边每个点赋一个权值d。 如果右边某个点是A类点,则权值等于它的代价,否则ans+=它的代价,权值=它的代价的相反数。 s\to i连接费用0流量1的边。 i\to j+n如果i,j能匹配则连接费用0
阅读全文
摘要:https://csacademy.com/contest/round-79/task/smallest-subsets/ 给定一个元素全为正整数的序列a,定义一个长度k的子序列i的权值为\sum_^ka_ 询问权值排名第l小的子序列的权值。 做法:先考虑空序列,把它插入堆内。
阅读全文