随笔分类 - 基础算法 -- 动态规划
摘要:【CodeChef】Find a special connected block CONNECT(斯坦纳树) 题面 "Vjudge" 题解 还是一样的套路题,把每个数字映射到$[0,K)$的整数,然后跑斯坦纳树,重复多次就有很大概率出解。 但是别乱随机,我直接随机$WA$成sb了,后来学了别人代码用
阅读全文
摘要:【CF933E】A Preponderant Reunion(动态规划) 题面 "CF" "洛谷" 题解 直接做很不好搞,我们把条件放宽,我们每次可以选择两个相邻的非零数让他们减少任意值,甚至可以减成负数(虽然你肯定不会把它弄成负数的)。代价为减少的值。不难证明这个问题的答案不会优于原题目。 我们假
阅读全文
摘要:【LOJ 575】【LNR 2】不等关系(容斥,动态规划,分治FFT) 题面 "LOJ" 题解 一个暴力$dp$,设$f[i][j]$表示考虑完了前$i$个位置,其中最后一个数在前面所有数中排名是第$j$大,那么转移的时候枚举一下当前数是第几大,并且满足不等式的限制就可以了,然后拿前缀和优化一下就可
阅读全文
摘要:【agc028E】High Elements(动态规划,线段树,贪心) 题面 "AtCoder" 你有一个$[1,N]$的排列$P$。 一个长度为$N$的字符串$S$是好的,当且仅当: 两个序列$X,Y$这样构造: 一开始,令$X,Y$都是空的。然后对于每一个$i=1,2,...,N$,依次考虑每一
阅读全文
摘要:【LOJ 2687】Vim(动态规划) 题面 "LOJ" 题解 发现移动的路径一定是每次往后跳到下一个某个字符的位置,然后往回走若干步,删掉路径上的所有$e$,然后继续执行这个操作。 这里稍微介绍一下线头$dp$,大概是把转移的路径画出来,最终要求能形成一个环,而每一个需要$dp$的位置代表一个点,
阅读全文
摘要:【HDU6037】Expectation Division(动态规划,搜索) 题面 "Vjudge" 你有一个数$n$,$n\le 10^{24}$,为了方便会告诉你$n$分解之后有$m$个不同的质因子,并且把这些质因子给你。 你每次可以把$n$变成一个它的约数,求变成$1$的期望步数。 题解 首先
阅读全文
摘要:【UOJ 390】【UNR 3】百鸽笼(动态规划,容斥) 题面 "UOJ" 题解 发现这就是题解里说的:“火山喷发概率问题”(大雾 考虑如果是暴力的话,你需要记录下当前每一个位置的鸽笼数量,因为概率会随着你空的鸽笼的数量而变化。 我们可以把这个问题转变为给一个长度为$N$的序列填数的问题。 直接算似
阅读全文
摘要:【Wannafly挑战赛29F】最后之作(Trie树,动态规划,斜率优化) 题面 "牛客" 题解 首先考虑怎么计算$[l,r]$这个子串的不同的串的个数。 如果$l=1$,我们构建$Trie$树然后第$i$层的点的个数就是$[1,i]$的答案。 如果$l$要向右移动一位,显然就是我们要把最上面那一层
阅读全文
摘要:【UOJ 76】【UR 6】懒癌(动态规划) 题面 "UOJ" 题解 神....神仙题。 先考虑如果是完全图怎么做。。。 因为是完全图,所以是对称的,所以我们只考虑一个有懒癌的人的心路历程。 如果只有一只狗有懒癌:第一天,看了看,似乎其他的狗都没有,但是村子里至少有一只狗有,然后就确定了。 如果有两
阅读全文
摘要:【UOJ 50】【UR 3】链式反应(分治FFT,动态规划) 题面 "UOJ" 题解 首先把题目意思捋一捋,大概就是有$n$个节点的一棵树,父亲的编号大于儿子。 满足一个点的儿子有$2+c$个,其中$c\in A$,且$c$个儿子是叶子,另外$2$个存在子树,且两种点的链接的边是不同的,求方案数。
阅读全文
摘要:【UOJ 22】【UR 1】外星人(动态规划) 题面 "UOJ" 题解 一道简单题? 不难发现只有按照从大往小排序的顺序选择的才有意义,否则先选择一个小数再去模一个大数是没有意义的。 设$f[i][j]$表示考虑了前$i$个数,模完之后是$j$的方案数。 转移的时候枚举这个数是模还是不模,如果不模的
阅读全文
摘要:【BZOJ4944】[NOI2017]泳池(线性常系数齐次递推,动态规划) 首先恰好为$k$很不好算,变为至少或者至多计算然后考虑容斥。 如果是至少的话,我们依然很难处理最大面积这个东西。所以考虑答案至多为$k$的概率,再减去至多为$k 1$的概率就是最终的答案。 发现要求的东西必须贴着底边,所以对
阅读全文
摘要:【CF285E】Positions in Permutations(动态规划,容斥) 题面 "CF" "洛谷" 题解 首先发现恰好很不好算,所以转成至少,这样子只需要确定完一部分数之后剩下随意补。 然后套一个二项式反演进行容斥就可以得到答案了。 考虑怎么算至少$m$个的贡献, 设$f[i][j][S
阅读全文
摘要:【CTS2019】氪金手游(动态规划) 题面 "LOJ" "洛谷" 题解 首先不难发现整个图构成的结构是一棵树,如果这个东西是一个外向树的话,那么我们在意的只有这棵子树内的顺序关系,子树外的关系与这棵子树之间的限制无关。所以我们只需要强制根节点在其他儿子之前的就行了(你可以认为如果这次随机抽到了子树
阅读全文
摘要:【CF1152F】Neko Rules the Catniverse(动态规划) 题面 "CF" 题解 我们先考虑一个需要扫一遍所有位置的做法。 那么状态一定是$f[i]$然后什么什么表示考虑到当前第$i$个位置的答案。 看看我们还需要记录什么,首先肯定要记录的是当前已经选了几个,所以多了一维$j$
阅读全文
摘要:【BZOJ4013】[HNOI2015]实验比较(动态规划) 题面 "BZOJ" "洛谷" 题解 看题目意思就是给你一棵树,连边表示强制顺序关系。然后你要给点染色,在满足顺序关系的情况下,将序列染成若干个颜色,同颜色之间没有顺序关系。求染色方案数。 那么设$f[i][j]$表示以$i$为根的子树内有
阅读全文
摘要:【BZOJ4007】[JLOI2015]战争调度(动态规划) 题面 "BZOJ" "洛谷" 题解 神仙题,我是做不来。 一个想法是设$f[i][j]$表示当前考虑到$i$节点,其子树内有$j$个人选择了打仗的最大贡献。 但是我们发现直接做我们并不会转移,因为我们不知道每个儿子的选择情况。 那么我们直
阅读全文
摘要:【BZOJ4000】[TJOI2015]棋盘(矩阵快速幂,动态规划) 题面 "BZOJ" "洛谷" 题解 发现所有的东西都是从$0$开始编号的,所以状压只需要压一行就行了。 然后就可以随意矩乘了。 cpp include include include using namespace std; de
阅读全文
摘要:【BZOJ3997】[TJOI2015]组合数学(动态规划) 题面 "BZOJ" "洛谷" 题解 相当妙的一道题目。~~不看题解我只会暴力网络流~~ 先考虑要求的是一个什么东西,我们把每个点按照$a[i][j]$拆成若干个点,每个具有二维偏序关系的点之间连一条边,于是我们就有了一个$DAG$,要求的
阅读全文
摘要:[BJOI2019]光线(递推) 题面 "洛谷" 题解 假装玻璃可以合并,假设前面若干玻璃的透光率是$A$,从最底下射进去的反光率是$B$,当前的玻璃的透光率和反光率是$a,b$。 那么可以得到转移: $$A=A'\sum_{j=0}^\infty B'^j b^j a=\frac{A'a}{1 B
阅读全文