![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
Self-Discipline
在校大学生
展开
-
UVA 12170 Easy Climb(dp+单调队列优化)
题意:给出一个序列,首尾不可改变,要求你使序列满足相邻2个|x_i - x_(i-1)| <=d,改变的代价就是两数相减绝对值,问最小代价。分析:区间dp类问题,根据题意,我们需要修改2到n-1之间的一些h的值,使得相邻2个h值差的绝对值不超过d。因为可以修改的数是一个实数,无法一一枚举,因此需要仔细对问题进行分析。首先,考虑只有3个值的情况:h1, h2, h3。那么根据题意,...原创 2019-07-06 15:48:26 · 220 阅读 · 0 评论 -
LA 4731 Cellular Network(贪心+概率+dp)
题意: 存在一个蜂窝网络,有n个部分,有一部手机存在着n个部分中的某一个,给定每个部分的存在概率,现在要将这n个部分分成w块,每一块内的部分同时访问。让你完成划分并输出找到手机的最小访问块数期望。分析: 显然先访问大概率的部分,使期望最小。先将n部分按概率从大到小排序,每次划分块时选择连续的一段。dp[i][j]为前i部分划分成j块的最小期望,有如下转移:dp[i][j] = min(dp...原创 2019-07-12 16:20:06 · 232 阅读 · 0 评论 -
POJ2279 排队
题意:《算法竞赛进阶指南》P265。分析:《算法竞赛进阶指南》P265-266,除了还可以用“杨氏矩阵”和“勾长公式”进行计算。代码:#include <cstdio>#include <cstring>#include <iostream>#define ll long longusing namespace std;int n[6],...原创 2019-07-24 09:14:47 · 408 阅读 · 0 评论 -
CH5101 LCIS(最长公共上升子序列)
题意:求两个序列的最长公共上升子序列。分析:《算法竞赛进阶指南》P266。代码:#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int N = 3006;int n, a[N], b[N], f[N][N];int ma...原创 2019-07-24 09:35:00 · 196 阅读 · 1 评论 -
POJ3666 Making the Grade(dp+离散化)
题意:《算法竞赛进阶指南》P267-268。分析:《算法竞赛进阶指南》P268-269。代码(方法二):#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int SIZE = 2010;...原创 2019-07-24 10:04:39 · 160 阅读 · 0 评论 -
CH5102 Mobile Service(dp+降维)
题意:《算法竞赛进阶指南》P269。分析:《算法竞赛进阶指南》P269-270。代码:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int L = 206, N = 1006...原创 2019-07-24 10:19:07 · 250 阅读 · 0 评论 -
CH5103 传纸条
题意:n*m的格子里每个格子有一个权值,从(1,1)走到(n,m)两条路,(只能向下或者向右)求两条路径的最大权值之和。走过的格子只算一次权值。分析:《算法竞赛进阶指南》P271。代码:#include <cstdio>#include <iostream>#include <algorithm>using namespace std;co...原创 2019-07-24 10:35:49 · 228 阅读 · 0 评论 -
LA 4394 刷字符串(区间dp)
题意:给定两个长度相等,只有小写字母组成字符串A和B,每步可以把A的一个连续子串刷成同一个字母,问至少需要多少步才能把A变成B。分析:区间DP,区间DP的套路就是 d[i][j]的在区间 (i,j) 刷的次数。二维无法转移,所以需要增加维度。关键是贪心出一个性质,每次刷一个串,都可以从头开始刷起,如果第一个字符相同,则从第二个开始刷,而每次刷要么只刷一个字符,要么刷到另一个与目标串首字符相同的...原创 2019-07-29 09:52:56 · 194 阅读 · 0 评论 -
POJ1015 Jury Compromise
题意:《算法竞赛进阶指南》P278。分析:《算法竞赛进阶指南》P278-279。代码:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;int...原创 2019-07-24 11:13:15 · 291 阅读 · 0 评论 -
LA 4327 Parade(单调队列优化dp)
题意:F城由n+1个横向路和m+1个竖向路组成。你的任务是从最南边的路走到最北边的路,使得走过的路上的高兴值和最大(高兴值可能为负值)。同一段路不能经过两次,且不能从北往南走,在每条横向路所花时间不超过k。分析:从南往北走和从北往南走是等价的,令d[ i ][ j ]为走到( i , j )最大的高兴值,则dp[ i ][ j ]=max(dp[ i-1 ][ p ]+s[ j ]-s[ p ...原创 2019-07-29 15:10:31 · 232 阅读 · 0 评论 -
uva 11404 Palindromic Subsequence(LCS回文串,最小字典序)
题意:给一个字符串,输出它的最长回文串,如果有多个结果,输出字典序最小的。分析:把原串反转求LIS,因为转移时不断求字典序最小导致后半部分可能并非回文,只需要前半部分。例如下面这个例子: s = 1 5 2 4 3 3 2 4 5 1reverse(s) = 1 5 4 2 3 3 4 2 5 1 LCS = 1 5 2 3 3 4 5 1代码:...原创 2019-07-12 15:37:14 · 666 阅读 · 0 评论 -
UVA 11552 Fewest Flops(序列划分模型;状态设计)
题意:给一个正整数k和字符串s,s的长度是k的倍数,把s每k个字符分成一组,没组之间的字符可以任意重排,但组与组之间的顺序保持不变。任务是让重排后的新字符串s'的块最少,连续相同的字符组成一个块,比如abbbaa有三个块a、bbb、aa。分析:主要在于块与块交接处的影响,即末尾和开头部分,组内直接贪心把相同的相邻放就行,dp[i][j]表示前i组,以j结尾的最少块数,dp[i][j] 转移时要...原创 2019-07-12 14:51:57 · 123 阅读 · 0 评论 -
uva10304 最优二叉排序树 (四边形优化)
题意:给n个符号建立一棵排序二叉树,给出每个符号检索的频率,要求从检索的次数最小。分析:《训练指南》P64。参考:https://blog.csdn.net/count24/article/details/7226640代码:#include<bits/stdc++.h>#define INF 16843009#define IM 253#define FU(i,...原创 2019-07-07 15:24:44 · 564 阅读 · 0 评论 -
牛客网笔试题 逃离农场
题意:牛牛在农场饲养了n只奶牛,依次编号为0到n-1, 牛牛的好朋友羊羊帮牛牛照看着农场.有一天羊羊看到农场中逃走了k只奶牛,但是他只会告诉牛牛逃走的k只奶牛的编号之和能被n整除。你现在需要帮牛牛计算有多少种不同的逃走的奶牛群。因为结果可能很大,输出结果对1,000,000,007取模。例如n = 7 k = 4:7只奶牛依次编号为0到6, 逃走了4只编号和为7的有:{0, 1, 2, ...原创 2019-07-18 09:07:54 · 357 阅读 · 0 评论 -
牛客网笔试题 随机的机器人(概率DP+滚动数组)
题意:有一条无限长的纸带,分割成一系列的格子,最开始所有格子初始是白色。现在在一个格子上放上一个萌萌的机器人(放上的这个格子也会被染红),机器人一旦走到某个格子上,就会把这个格子涂成红色。现在给出一个整数n,机器人现在会在纸带上走n步。每一步,机器人都会向左或者向右走一个格子,两种情况概率相等。机器人做出的所有随机选择都是独立的。现在需要计算出最后纸带上红色格子的期望值。输入描述:...原创 2019-07-18 09:57:41 · 612 阅读 · 0 评论 -
UVALive 3683/UVa 1380 A Scheduling Problem(树形DP)
题意: 有n(n<=200) 个恰好需要一天完成的任务,要求用最少的时间完成所有任务。任务可以并行完成,但必须满足一些约束,约束分为有向约束和无向约束两种,其中A->B表示A必须在B之前完成,A-B表示A和B不能在同一天晚上。输入保证约束图是将一颗树的一些边定向之后得到的。分析: 参考紫书P297-298,写的很详细。算是一道比较复杂的树形dp了。LRJ代码:#inclu...原创 2019-07-06 17:17:55 · 998 阅读 · 0 评论 -
uva10635Prince and Princess(LIS)
题意:求最长相同公共子序列。分析:《训练指南》P66,本题是一道经典的题目,巧妙的将LCS问题转化为LIS问题。这种题目的一个特定就是其中一个序列的所有元素均不相同。首先,我们可以对A数组重新编号为{1,2,3,...n},接下来对于B数组的每个元素,替换为A中那个元素的编号,若没有在A中出现,那么直接置0,这样,B数组也变为一个由编号构成的数组,此时我们发现,A数组是一个自然序列,那么只要在...原创 2019-07-06 23:33:10 · 202 阅读 · 0 评论 -
uva 10564 - Paths through the Hourglass 沙漏里的路径(类似01背包问题)
题意:给出一个沙漏形状的2(n - 1)行矩阵,并给出一个总全值和每个坐标的权值,每个位置可以走向下一行与它相邻的两个或一个位置(参见题目中的图),请找出有多少调路径上的权值和等于给定的总权值,并输出字典序最小的一条路径的起始位置 和方案。分析:数字三角的升级版,本题需要记录每个点所有能出现的情况,所以开一个三维数组,dp[i][j][k]表示在i,j这个位置权值和为k的走法有多少种,状态转移...原创 2019-07-16 09:45:47 · 189 阅读 · 0 评论 -
uva10559 Blocks(区间DP 增加维度)
题意:每次可以选择一个区间(连续相同的序列)消除,得分为 len*len;问最大得分。分析:紫书P298-299,很详细。LRJ代码:#include<bits/stdc++.h>using namespace std;const int maxn = 200 + 5;int n, A[maxn], d[maxn][maxn][maxn];// blo...原创 2019-07-07 08:58:03 · 196 阅读 · 0 评论 -
uva10304 Optimal Binary Search Tree(最优二叉排序树 区间dp)
题意:给n个符号建立一棵排序二叉树,给出每个符号检索的频率,要求从检索的次数最小。分析:《训练指南》P64,很详细。代码:#include<bits/stdc++.h>using namespace std;const int INF = 0x3f3f3f3f;const int N = 210;int n;int w[N];int sum[N];int f[...原创 2019-07-07 11:22:03 · 509 阅读 · 0 评论 -
UVALive 4015 Caves 洞穴(树形DP)
题意:一棵n个节点的有根树,树的边有正整数权,表示两个节点之间的距离,你的任务是回答这样的询问,从根节点出发,走不超过x单位的距离,最多能走多少个节点,节点经过多次算一个,对于每次的询问输出:经过节点数最大的值。 注意题目给出的i, j,d,其中 j 是 i 的父节点。分析:开始想着dp[i][x]表示以i为根节点走x单位距离最多到底的节点数,不太好转移,得转化思路,设 d[ i ][ j...原创 2019-07-16 11:31:26 · 133 阅读 · 0 评论 -
四边形优化dp入门
参考博客:https://www.cnblogs.com/zxndgv/archive/2011/08/02/2125242.html、https://www.cnblogs.com/Jstyle-continue/p/6358334.html。原创 2019-07-07 15:13:50 · 556 阅读 · 0 评论 -
UVA 11600 Masud Rana(期望+状压DP)
题意:n个城市,城市间两两有一条道路,m条道路是没有怪物的,每天随机选一个城市(除了本身),走过去,消灭途中的怪物,如果消灭完后,所有城市都可以不通过有怪物的道路到达就结束,问平均需要的天数。分析:图+期望+状压好题。求期望,逆推法。我们可以将互相间没有妖怪的城市看成一个点,因为他们对答案没有贡献。dp[u][s]表示当前在u这点,已经可以互相到达的城市集合为s,令已经完成的城市数为have,...原创 2019-07-29 16:13:39 · 128 阅读 · 0 评论 -
POJ 3585 Accumulation Degree 树最大流(树形dp+二次扫描与换根法)
题意:给出一棵树,树上的边都有其权值,让我们求一个点能往外流的最大流量(会受到其它边权容量的限制)。分析:二次扫描与换根法模板题,详见《算法竞赛进阶指南》P292-295,讲的很详细,一看就懂。代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm...原创 2019-07-20 10:07:37 · 254 阅读 · 0 评论 -
CH5402 选课(树形dp+背包)
题意:从n门课中选出m门课,使得他们的学分和最大。有的课程有先修课。分析:《算法竞赛进阶指南》P291-292。代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespa...原创 2019-07-22 15:13:26 · 299 阅读 · 0 评论 -
POJ2228 Naptime(环形结构上的dp)
题意:一天由n个小时构成,在第i个小时睡觉能够恢复Ui点体力。有一头牛要休息b个小时,可以不连续,但休息的第1个小时无法恢复体力。前一天的最后一个小时和第二天的第一个小时是连在一起的,求这头牛能恢复的体力最大值。分析:《算法竞赛进阶指南》P295-297。代码:#include <cstdio>#include <cstring>#include <...原创 2019-07-22 15:30:33 · 722 阅读 · 0 评论 -
BZOJ2330/洛谷P3275(糖果)
题意:Description幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求。幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友...原创 2019-07-31 11:27:57 · 146 阅读 · 0 评论 -
CH 5501 环路运输(环形结构上的dp)
题意:n个在一个环上的仓库,两两之间运货的代价是a[i]+a[j]+min(∣i−j∣,∣n−(i−j)∣) 求最大代价。分析:《算法竞赛进阶指南》P297。代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespa...原创 2019-07-22 15:45:54 · 248 阅读 · 0 评论 -
POJ 3171 区间覆盖最小花费(dp+线段树优化)
题意:有一个大区间和n个小区间,每个小区间都有一个代价,求最少付出多少代价可以使得小区间完全覆盖大区间。分析:《算法竞赛进阶指南》P312。代码:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace st...原创 2019-07-22 20:50:54 · 482 阅读 · 0 评论 -
HDU 5542 The Battle of Chibi(dp+树状数组)
题意:给出长度为n的序列,问这个序列中有多少个长度为m的单调递增子序列。分析:《算法竞赛进阶指南》P312-313。代码:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int...原创 2019-07-22 21:52:46 · 133 阅读 · 0 评论 -
hdu 6558 The Moon(概率dp)
题意:每赢一局 (赢的概率为 p) 能以概率 q 开一个箱子,如果开箱失败 q = q + 2%,如果该局失败 q = q + 1.5%。求直到成功开箱之前期望。分析:已知的状态很明显,当获胜中奖概率为100%,这个时候期望是已知的就是1/p,例如一个硬币抛起来正反面的概率都是1/2。得到正面或者反面,期望的次数就是2。定义状态dp[i]表示当前的q值为i时的期望,则当q值为100时dp[10...原创 2019-07-28 20:49:48 · 216 阅读 · 0 评论 -
CH3803 扑克牌(概率dp)
题意:Rainbow把一副扑克牌(54张)随机洗开,倒扣着放成一摞。然后Admin从上往下依次翻开每张牌,每翻开一张黑桃、红桃、梅花或者方块,就把它放到对应花色的堆里去。Rainbow想问问Admin,得到A张黑桃、B张红桃、C张梅花、D张方块需要翻开的牌的张数的期望值E是多少?特殊地,如果翻开的牌是大王或者小王,Admin将会把它作为某种花色的牌放入对应堆中,使得放入之后E的值尽可能小。...原创 2019-07-28 21:25:16 · 307 阅读 · 0 评论 -
2019牛客暑期多校训练营(第二场)H:Second Large Rectangle(dp or 单调栈)
题意:给定一个包含0和1的矩阵,输出矩形内都是1的第二大的矩形的大小。分析:经典题变形而来,详见https://www.cnblogs.com/linkstar/p/6139668.html,dp和单调栈两种解法,对着代码跑一遍更好理解。dp更好理解,复杂度略高。注意第二大不一定是用求最大的方法找到的第二大,也可能是最大的减去一行或者一列的大小。dp代码:#include<bi...原创 2019-08-10 23:59:21 · 122 阅读 · 0 评论 -
CH5302 金字塔(区间DP)
题意:给定的字符串是一棵树dfs遍历的顺序结果。求的是有多少种树可以得到这种结果。分析:《算法竞赛进阶指南》P286-288。代码:#include <cstdio>#include <cstring>#include <iostream>#define ll long longusing namespace std;const int ...原创 2019-07-22 14:23:49 · 308 阅读 · 0 评论 -
POJ1179 Polygon(区间dp)
题意:多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号,游戏第1步,将一条边删除,随后n-1步按以下方式操作(1)选择一条边E以及由E连接着的2个顶点V1和V2(2)用一个新的顶点取代边E以及由E连接着的2个顶点V1和V2。将由顶点V1和V2的整数值通过边E上的运算得到的结果赋予新顶点...原创 2019-07-22 11:36:42 · 174 阅读 · 0 评论 -
51nod1021石子归并(区间dp)
题意:N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。分析:经典区间dp,详见《算法竞赛进阶指南》P283-284。代码:#include<iostream>#include<cstdio>#include<cstring>...原创 2019-07-22 11:24:12 · 115 阅读 · 0 评论 -
HDU 2196 Computer(树形dp+换根法+树的直径)
题意:给出一棵树,求离每个节点最远的点的距离分析:方法一:贪心做法,不会证明,找到直径的两个端点,分别dfs一下,求出两端到每个点分别的距离取最大值,树的直径作用很大啊。方法二:把无根树转化成有根树分析,对于每个节点,维护所有以当前节点为根的子树中距当前节点最远的距离和次远距离,二次扫描(两遍dfs)。参考:https://blog.csdn.net/shuangde800/art...原创 2019-07-20 14:16:41 · 532 阅读 · 0 评论 -
LA4987 EvacuationPlan 疏散计划(dp+贪心)
题意:n个施工队,m个避难所,在一个正x坐标轴上,给出每个施工队坐标和每个避难所坐标,要求每个施工队到一个避难所避难,且每个避难所至少有一个施工队,求所有施工队所走的距离和的最小值。分析:先把施工队和避难所排个序,dp[i][j]表示前i个施工队用j个避难所的最小花费。转移方程为dp[i][j] = min(dp[i-1][j],dp[i-1][j-1])+abs(a[i].x-b[j].x)...原创 2019-07-29 19:25:18 · 258 阅读 · 0 评论 -
BZOJ1791/洛谷4381 Island 岛屿(基环森林直径和+单调队列优化DP+树形DP)
题意:基环树森林的各个树直径之和。分析:基环树(树)森林直径模板,详见《算法竞赛进阶指南》P388-389。代码:#include<iostream>#include<cstdio>using namespace std;const int u=1000010;int ver[2*u],edge[2*u],next[2*u],head[u],du[...原创 2019-07-30 10:56:59 · 362 阅读 · 0 评论 -
BZOJ3037/CH6401 创世纪(贪心 or 基环树dp)
题意:上帝手中有 N(N≤10^6) 种世界元素,每种元素可以限制另外1种元素,把第 i 种世界元素能够限制的那种世界元素记为 A[i]。现在,上帝要把它们中的一部分投放到一个新的空间中去建造世界。为了世界的和平与安宁,上帝希望所有被投放的世界元素都有至少一个没有被投放的世界元素限制它。上帝希望知道,在此前提下,他最多可以投放多少种世界元素?分析:方法一:入度为0的点x,由于x无法被控制,...原创 2019-07-30 15:16:52 · 387 阅读 · 0 评论