
动态规划
当然是学习dp,背包这种动态规划的算法知识啦
S atur
要变成萤火虫~
展开
-
换根dp(啊啊啊啊啊)
传送门思路: * 首先就是常规的dfs求根节点到其他所有点的距离和。如若x为根节点,y为x的直系子节点,那么y所在子树对x的贡献为dis[y]+cnt[y],dis[y]为y到以y为根节点的所有子树节点的距离和,cnt[y]为y做根节点的所有子树节点数。 * 再进行换根dp处理。在将根节点从x移动到y的时候,dp[y] = dp[x]-cnt[y]+(n-cnt[y);其中的-cnt[y]是将以y引申出来的cnt[y]条路径都-1,而+(n-cnt[y])是将从x引申出来的不...原创 2021-07-09 15:04:20 · 232 阅读 · 0 评论 -
Codeforces D Rarity and New Dress (二维dp & 菱形寻找)
传送门题意: 给出n*m的矩形,相同字符的表示同一种颜色,找出矩阵中有多少个斜正方形(如下图所示)。思路:设dp[i][j]表示(i,j)为止以上能最多得到的"斜正方形",答案就是所有位置的dp值之和。而对于位置(i,j),只需要考虑(i-1,j-1),(i-1,j),(i-1,j+1),(i-2,j)位置是否与其同色。若同色则(i,j)位置构成一个图形,直接dp[i][j]=1。反之就dp[i][j] = min(dp[i-1][j-1],dp[i-1][j+1],dp[i-2][j])+原创 2020-08-30 00:04:48 · 199 阅读 · 0 评论 -
1005. Equal Sentences (dp / 字符串)2020 Multi-University Training Contest 4
传送门思路:题意:给一个字符串 S ,求与其相似的本质不同的字符串 T 的个数。相似的定义有:1.单词的可重集合相同。2.对于一个词 α ,它在 S 中的第 i 次出现和在 T 中的第 i 次出现的指数相差不超过1。官方题解:根据题解,不难找到如下规律:如果S[i] == S[i-1],就有dp[i] = dp[i-1].否则就有dp[i] = dp[i-1] + dp[i-2] + 1.第 i 位置存在即是dp[i] + 1个解。代码实现:#includ原创 2020-07-31 17:21:41 · 151 阅读 · 0 评论 -
E. Two Matchings (dp / 规律) 2020牛客暑期多校训练营(第三场)
传送门思路:构造p和q数组,都是1到n的全排列,且满足p[p[i]]=i,p和q数组对应位置都不同。答案为 | a[i] - a[p[i]] | + | a[i] - a[q[i]] |。其实理解了题意找到规律就是个比较经典的线性dp题。n 是偶数,所以可以考虑将 n 个数分配到不同的长度的偶环中,对于q 和 p,只需要在偶环中交换下位置即可。先将a排下序,然后对于任意 len >= 8 的偶环,都可以分解为 len = 4 和 len = 6 的偶环,且答案最小。并能总结到规律 l原创 2020-07-23 22:14:16 · 137 阅读 · 0 评论 -
acwing 298. 围栏 (单调队列 & dp)
传送门题意: 有N块木板从左到右排成一行,有M个工匠对这些木板进行粉刷,每块木板至多被粉刷一次。第 i 个木匠要么不粉刷,要么粉刷包含木板 Si 的,长度不超过 Li 的连续的一段木板,每粉刷一块可以得到 Pi 的报酬。不同工匠的Si不同。请问如何安排能使工匠们获得的总报酬最多。输入格式第一行包含两个整数N和M。接下来M行,每行包含三个整数Li,Pi,Si。输出格式输出一个整数,表示结果。数据范围1≤N≤16000,1≤M≤100,1≤Pi≤10000输入样例:8 43 2 2原创 2020-07-18 02:24:20 · 334 阅读 · 0 评论 -
Codeforces B. Orac and Models (线性dp) (Round #641 Div.2)
传送门题意: 给出一个初始数组s,现让选择其中元素构造一个新的数组a。新数组满足相邻两个a[i] 与 a[i + 1]元素,而a[i + 1]元素在s数组中的索引能被a[i]在s中的索引整除,且a[i + 1] > a[i]。试问能构成的a数组的大小最大为多少?思路:既然是统计长度且前后的索引要相关,那么久从后往前开始dp先定义dp数组,其中dp[i]表示以索引为 i 的元素作为开头能取得max由于n / 2以后的数再也找不到索引为它倍数的元素了,索引我们就从n / 2往1开始dp,而原创 2020-07-07 20:38:59 · 217 阅读 · 0 评论 -
SCPC :普普通通的DP(&位运算)
传送门题目描述:给你一个n*m的矩阵,你需要从左上角走到右下角,你每次只能向下或者向右走,并且不能走出矩阵之外。只要你走到终点之后,你就会获得奖励,奖励的金额为:所有经过的元素做“与”运算(津巴韦布)。帮自己算一算,你能获得的最大奖励金额为多少呢?与运算:0&0=0 , 0&1=0 , 1&0=0 , 1&1=1例:假设你从左上角到右下角(包括左上角和右下角)经过的元素为:2,2,3,2。你的奖励金额为:(2 & 2 & 3 & 2)= 2原创 2020-06-14 22:03:10 · 277 阅读 · 0 评论 -
分组背包问题
题目链接:https://www.acwing.com/problem/content/9/题意:有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开...原创 2020-01-28 22:36:57 · 215 阅读 · 0 评论 -
多重背包Ⅱ
题目链接:https://www.acwing.com/problem/content/5/题意:有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。数据范围0<N≤10000<V≤20000<vi,wi,si≤2000提示:...原创 2020-01-28 21:57:54 · 171 阅读 · 0 评论 -
多重背包问题Ⅰ
题目链接:https://www.acwing.com/problem/content/4/题意:有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。数据范围0<N,V≤1000<vi,wi,si≤100输入样例4 51 2 32...原创 2020-01-28 21:09:53 · 112 阅读 · 0 评论 -
完全背包问题
题目链接:https://www.acwing.com/problem/content/3/题意:有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 51 22 ...原创 2020-01-28 20:45:32 · 116 阅读 · 0 评论 -
01背包问题
题目链接:https://www.acwing.com/problem/content/2/题意:有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 51 22 4...原创 2020-01-28 19:57:20 · 221 阅读 · 0 评论 -
状压dp:炮兵阵地
题目链接:https://www.acwing.com/problem/content/294/害!状压dp真的好难啊,借鉴一下题解!!附上原文链接:https://www.acwing.com/solution/acwing/content/5159/思路:每个状态可以影响到往下两层,所以要枚举当前行状态,上一行状态以及上上行的状态,同样,记录的时候也要再加一维,dp[i][j][k]表示...转载 2020-01-28 17:01:41 · 197 阅读 · 0 评论 -
状态压缩dp:最短Hamilton路径
题目链接:https://www.acwing.com/problem/content/93/题意:给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数n。接下来n行每行n个整数,其中第i行第j个整数表示点i到j的距离(记为a[i...原创 2020-01-20 18:42:37 · 205 阅读 · 0 评论 -
状态压缩dp:蒙德里安的梦想
题目链接:https://www.acwing.com/problem/content/293/题意:求把NM的棋盘分割成若干个12的的长方形,有多少种方案。例如:当N=2,M=4时,共有5种方案。当N=2,M=3时,共有3种方案。如下图所示:数据范围1≤N,M≤11输入样例:1 21 31 42 22 32 42 114 110 0输出样例:10123...转载 2020-01-20 17:39:42 · 258 阅读 · 0 评论 -
数位统计dp:计数问题
题目链接:https://www.acwing.com/problem/content/340/题意:给定两个整数 a 和 b,求 a 和 b 之间的所有数字中0~9的出现次数。例如,a=1024,b=1032,则 a 和 b 之间共有9个数如下:1024 1025 1026 1027 1028 1029 1030 1031 1032其中‘0’出现10次,‘1’出现10次,‘2’出现7次,...原创 2020-01-20 16:17:58 · 426 阅读 · 3 评论 -
计数类dp:整数划分
题目链接:https://www.acwing.com/problem/content/902/题意:一个正整数n可以表示成若干个正整数之和,形如:n=n1+n2+…+nk,其中n1≥n2≥…≥nk,k≥1。我们将这样的一种表示称为正整数n的一种划分。现在给定一个正整数n,请你求出n共有多少种不同的划分方法。数据范围1≤n≤1000输入样例:5输出样例:7思路1:用完全背包思维...原创 2020-01-19 21:02:34 · 331 阅读 · 0 评论 -
区间dp:合并石子
题目链接:https://www.acwing.com/problem/content/284/题意:设有N堆石子排成一排,其编号为1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。找出一种合理的方...原创 2020-01-19 00:36:14 · 161 阅读 · 0 评论 -
线性dp:编辑距离
题目链接:https://www.acwing.com/problem/content/901/题意:给定n个长度不超过10的字符串以及m次询问,每次询问给出一个字符串和一个操作次数上限。对于每次询问,请你求出给定的n个字符串中有多少个字符串可以在上限操作次数内经过操作变成询问给出的字符串。每个对字符串进行的单个字符的插入、删除或替换算作一次操作。数据范围1≤n,m≤1000,输入样例...原创 2020-01-18 23:44:50 · 292 阅读 · 0 评论 -
线性dp:最短编辑距离
题目链接:https://www.acwing.com/problem/content/904/题意:给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有:1. 删除–将字符串A中的某个字符删除。2. 插入–在字符串A的某个位置插入某个字符。3. 替换–将字符串A中的某个字符替换为另一个字符。现在请你求出,将A变为B至少需要进行多少次操作。数据范围1≤n,m≤1000...原创 2020-01-18 23:20:40 · 291 阅读 · 0 评论 -
线性dp:最长公共子序列
题目链接:https://www.acwing.com/problem/content/899/题意:给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。数据范围1≤N≤1000,输入样例:4 5acbdabedc输出样例:3思路:状态表示:1,集合:f[i,j]表示a[]前i个字母和b[]前j个字母所包含的公共子序列。2,这些子序...原创 2020-01-18 22:41:27 · 231 阅读 · 0 评论 -
线性dp:最长上升子序列Ⅱ
题目链接:https://www.acwing.com/problem/content/898/给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。数据范围1≤N≤100000,−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4思路:动态规划+二分O(n * logn)状态表示:q[i]表示长度为i的最长上升子序列,末尾最小的数字...原创 2020-01-18 00:10:34 · 189 阅读 · 0 评论 -
线性dp:最长上升子序列Ⅰ
题目链接:https://www.acwing.com/problem/content/description/897/给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。数据范围1≤N≤1000,−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4思路:时间复杂度O(n²)状态表示:f[i]表示从第一个数字开始算,以w[i]结尾...原创 2020-01-17 22:31:52 · 152 阅读 · 0 评论 -
线性dp:数字三角形
题目链接:https://www.acwing.com/problem/content/900/题意:给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。数据范围1≤n≤500,−10000≤三角形中的整数≤10000输入样例:573 88 1 02 7 4 44 5...原创 2020-01-17 19:28:17 · 212 阅读 · 0 评论 -
线性dp:CF1287(C) Garland
题目链接:https://codeforces.com/contest/1287/problem/CC. Garland题意:一串绳子上又n个编号为1到n的灯泡(乱序),其中几个掉落,然我们把掉落的灯泡安装回去,使绳子的权值最小。相邻两个为不同奇偶性为一个权值,如1,4,2,3,5的权值为2;而1,3,5,7,6,4,2的权值为1.思路:因为这是线性dp,开一个四维数组dp[i][j][k]...原创 2020-01-09 10:12:07 · 258 阅读 · 0 评论 -
区间dp:洛谷p1880石子合并
题目链接:https://www.luogu.com.cn/problem/P1880在一个圆形操场的四周摆放 N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出一个算法,计算出将 N 堆石子合并成 1 堆的最小得分和最大得分。输入 #144 5 9 4输出 #14354思路:因为是环形,可从任何一个...原创 2020-01-09 09:57:54 · 189 阅读 · 0 评论