随笔分类 - 基础算法——DP
十分常用的算法,大致目录如下:
普通DP,记忆化搜索(实质是DP,但在实现方式上与普通DP各有优劣),状压DP,数位DP,树形DP,区间DP,概率/期望DP,数学DP,插头DP,最短路DP。。。。。。。。
各类常见DP优化如下:
单调队列优化,斜率优化,决策单调性优化(其实上面两种某种意义上也包括在这里面)
摘要:###A.Leading 1s 题面 题目大意: 定义$f(i)$为$i$的前缀1个数,现给定n求$\sum_{i = 1}^{n}f(i)$ 题解: emmm官方题解貌似也挺精妙的,不过我就直接上数位DP了,复杂度也一样。 直接DP数组统计前导1个数不太方便,因为前导1最多就15个,所以我们考虑统
阅读全文
摘要:题面 "[USACO12NOV]同时平衡线Concurrently Balanced Strings" 题解 考虑DP。 $f[i]$表示以$i$为左端点的合法区间个数。令$pos[i]$表示以$i$为左端点,最靠左的合法右端点。 那么有如下转移: $f[i] = f[pos[i] + 1] + 1
阅读全文
摘要:题面 "题面" $\Delta$题面有点问题,应该是数列中没有长度大于 等于 $len$的连续数字才是合法的. 题解 设$f[i][j]$表示DP到$i$位,以$j$为结尾的方案数, $sum[i]$表示$\sum_{j = 1}^{k}f[i][j]$, $g[i][j]$表示第$i$位为结尾,当
阅读全文
摘要:题面 "题面" 题解 (表示第一段文字导致我在考场上没看懂题……因为我以为这个定义是定义在整个排列上的,所以相似 = 相同。结果其实是可以应用在一个区间上……) 首先我们发现,2个区间相似,其实就是离散化之后相同。 观察到,相似区间的位置是没有影响的,且由于数字两两不同,所以不管相似区间内是哪些数,
阅读全文
摘要:照惯例CF的题不放原题链接。。。 题意:一个序列上有n个点,每个点有权值pi和si。表示这个点一开始有pi个物品,最多可以卖出si个物品,每个点都可以把物品向编号更大的点运输,但是对于i < j的任意点对(i, j)最多从i到j运c个物品。求最多能卖出多少个物品。 题解: 如果不考虑数据范围的话,可
阅读全文
摘要:题面:CF311B Cats Transport 题解: 首先我们观察到山与距离其实是没有什么用的,因为对于任意一只猫,我们都可以直接算出如果有一个人要恰好接走它,需要在哪一时刻出发,我们设第i只猫对应的这个时刻为$t_{i}$. 注意这个$t_{i}$是我自己新定义的,跟题目中的没有关系,下面所写
阅读全文
摘要:题面:[NOIP2017]宝藏 题面: 首先我们观察到,如果直接DP,因为每次转移的代价受上一个状态到底选了哪些边的影响,因此无法直接转移。 所以我们考虑分层DP,即每次强制现在加入的点的距离为k(可能实际上小于k),这样就可以忽略掉上个状态选了哪些边的影响了。 所以这样为什么是正确的呢? 设f[i
阅读全文
摘要:题意: 给定一个序列,你要将其分为k段,总的代价为每段的权值之和,求最小代价。 定义一段序列的权值为$\sum_{i = 1}^{n}{\binom{cnt_{i}}{2}}$,其中$cnt_{i}$表示当前这段序列中数字大小为i的数的个数。 题解: 先考虑暴力DP, f[i][j]表示DP到i位,
阅读全文
摘要:~~~题面~~~ 题解: 首先我们要观察到一个性质,因为在固定的起始距离下,经过固定的操作,最后所在的位置是固定的,我们设经过操作1 ~ i之后所在的地方距离终点为d[i]. 那么如果女巫可以修改第i个操作,那么就相当于已经经过了1 ~ i - 1的操作,所以这个时候Alice已经在d[i - 1]
阅读全文
摘要:题意:求节点数为n的,高度大于等于h的二叉树的个数。 题解: 一开始没看到二叉树的限制,,,想了好久。因为数据范围很小,所以可以考虑一些很暴力的做法。 有2种DP方式都可以过。 1,f[i][j]表示节点数为i,高度恰好为j的方案数,那么$ans = \sum_{i = h}^{i <= n}{f[
阅读全文
摘要:~~~题面~~~ 题解: 观察到拼接后的数据范围过大,无法O(n)解决,但是大区间是由很多小区间组成,而小区间是固定的,不会变化,所以可以考虑预处理出每个小区间的信息,然后根据给定序列按顺序一步一步合并区间信息。 跟线段树维护区间最大子段和类似,要合并2个区间我们只需要知道如下信息: 前缀最大子段和
阅读全文
摘要:~~~题面~~~ 题解: 感觉还是比较妙的,复杂度看上去很高(其实也很高),但是因为n只有100,所以还是可以过的。 考虑一个很暴力的状态f[i][j][x][y]表示考虑取区间i ~ j的方格,左右端点颜色分别是x, y.的最大值。 那么有如下转移 1,直接继承子区间的答案 f[i][j][x][
阅读全文
摘要:~~~题面~~~ 题解: 偶然翻到这道题,,,就写了。 观察到一个数被插在哪里只受前一个数的影响,如果明确了前一个数是哪个,那么我们就可以确定大小关系,就可以知道当前这个数插在哪里,而上一个插入的数就是上一个数,所以根据这个来设DP状态。 f[i][j]表示满足理想数列的i ~ j,且i是最后一个插
阅读全文
摘要:~~~题面~~~ 题解: 此题可以用可持久化并查集暴力水过,但正解是kruskal重构树。 不会kruskal重构树请戳:kruskal重构树 观察到车可以通过哪些边跟边的长度并没有关系,所以考虑用边的海拔排序建出重构树,这样我们就得到了一个只跟海拔相关的关系。 于是对于任意水位线,我们都可以得知,
阅读全文
摘要:~~~题面~~~ 题解: 挺好的一道题。 首先我们将所有边反向,跑出n到每个点的最短路,然后f[i][j]表示从i号节点出发,路径长比最短路大j的方案数。 观察到,如果图中出现了0环,那么我们可以通过在环上走无数次来获得无数条不同路径,因此这就无解了。 如果没有0环,当且仅当这张图的最短路图是一个D
阅读全文
摘要:~~~题面~~~ 题解: 表示今天做题一点都不顺。。。。 这题也是看了题解思路然后自己想转移的。 看的题解其实不是这道题,但是是这道题的加强版,因为那道题允许交换k对数。 因为我们选出的是连续的一段,所以假设我们选了某一段,那么原序列将会被分为3段,我们设这3段分别是第0段,第1段和第2段,我们假设
阅读全文
摘要:~~~题面~~~ 题解: 因为数据范围不大,而且题目要求的是正方形,所以这道题有2种解法。 1,st表。 这种解法暴力好写好理解,但是较慢。我们设st[i][j][k]表示以(i, j)为左端点,向下/向右分别扩展$2^k$格的最大值,最小值同理,处理完后$n^2$枚举左端点取最优值即可。 (此为早
阅读全文
摘要:~~~题面~~~ 题解: 首先我们需要发现一个性质,在括号序列不变的情况下,括号匹配是不会变的,因此不论子串怎么取,括号匹配的关系是不会变化的。这是一个很容易发现的性质,然而我太弱,没发现。 于是可以据此进行DP,我们记录下每个右括号与哪个左括号进行匹配,记为pos[i], 设f[i]表示DP到i位
阅读全文
摘要:~~~题面~~~ 题解: 首先观察到题目要求的是合法回文串的个数,而回文串要求从前往后和从后往前是一样的,因此我们假设有两只猪,分别从左上和右下开始走,走相同的步数最后相遇,那么它们走的路能拼在一起构成一个回文串,当且仅当它们走字符串是完全相同的。 那么我们可以根据这个性质进行DP,设f[i][j]
阅读全文
摘要:~~~题面~~~ 题解: 感到此题非常的神奇。。。看了大佬的题解才懂的。 首先建模: 先把所有队伍的出去回来时间都放在一个数组里,然后排序,从左到右扫一边,给每个队伍都建一个带权点,进行如下操作: (s表示出发,t表示回家, len表示两个点之间的时间差) 1,对于s > t的情况,如果两者属于一个
阅读全文

浙公网安备 33010602011771号