![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划系列
文章平均质量分 64
phython96
ACM退役~
展开
-
区间dp专题
区间dp专题基本思想区间dp一类的问题往往子问题具有很明显的区间性质,也就是说我们可以通过将子问题定义为整个区间的一个子区间.因为一个大区间可以切分成两段相邻的子区间.从这点出发,我们便可以找到递推关系.1.纸牌游戏蜘蛛牌游戏规则是这样的:只能将牌拖到比它大一的牌上面(AAA最小,KKK最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动,游戏的目的是将所有的牌按同一花色从小...原创 2019-03-15 23:52:36 · 241 阅读 · 0 评论 -
codeforces G - Almost Increasing Array 动态规划、动态开点线段树
题意给出一个序列,允许删除一个元素,并将任意元素的值修改为任意整数,问最少修改多少个元素使得序列变成严格单调递增的序列?题解这道题目很具有启发性: 不考虑删除元素,原数列各个数值减去他们下标得到一个新的序列,那么新的序列的最长不减序列就是不需要修改的元素个数len,需要修改的元素个数就是n-len即可。这道题也是这么做的,我们枚举要删除的元素下标为kkk,并且得到以元素k−1...原创 2018-03-14 13:02:37 · 276 阅读 · 0 评论 -
洛谷 动态规划一日游 P2577、P1070、P2051
记2018年3月19日贼颓呢,一天就写了两道DP,还都不会写,这可GG。 动态规划真的难且有趣,算法题中动态规划占到了很大的比例,而且动态规划往往是辅助解决一些其他类型问题的基础,加深加强对动态规划问题的认识和训练非常有必要。P2577 午餐题意题意见题目链接题解这道题目本质上是一道背包问题,是背包问题的变形,这道题不同的地方在于有两个背包。 因此,...原创 2018-03-19 20:00:44 · 300 阅读 · 0 评论 -
洛谷P1169 树上分组背包
题解第一次写树上分组背包的题目。什么是分组背包?分组背包就是将物品进行分组每组内部只能选择一类物品。for(int i = 1;i <= N;++i){ for(int j = 0;j <= V;++j){ for(int k = 0;k <= item[I];++k){ dp[i][j] = max(dp[...原创 2018-03-18 23:30:28 · 576 阅读 · 0 评论 -
codeforces 940E Cashback 有趣的dp
题解 这么明显的一个dp,我怎么就没看出来呢?! 首先我们需要一些前提条件:任何划分出来的一个区间的长度不应该超过c。 如果这个区间长度大于c,那么设len=n∗c+klen=n∗c+klen=n*c+k,那么这个区间应该被分成n个长度为c的区间和一个长度为k的区间,因为这样的话去掉的元素数量是相同的,并且区间更小有利于较小的值不易被取到。因为每次去掉的最小值仅仅是局部最小值,...原创 2018-02-24 22:51:12 · 723 阅读 · 0 评论 -
P1081 开车旅行 倍增 洛谷
题目连接题意题目已经说的hin明确了。题解我们要求出从每个点出发,小A要走的城市和小B要走的城市。我们把iii以后的所有点的海拔加入到setsetset,然后拿H[i]H[i]H[i]到set里面去lower_bound,找到比H[i]大的两个地点和比H[i]小的两个地点,并把这四个地点与H[i]的差值加入到新的排序数组中,排个序,找到差值最小的两个点,分别就是小B...原创 2018-03-17 12:18:19 · 470 阅读 · 0 评论 -
codeforces F.Fibonacci String Subsequences
题意定义F(x)为F(x-1)与F(x-2)的连接(其中F(0) = ‘0’,F(1) = ‘1’)。 给出一个长度不超过100的字符串s,询问s在F(x)的所有子序列中出现了多少次。题解数量很大的计数问题,我们首先想到的解决方案就是dp。 我们考虑F(x) = F(x-1) + F(x-2) 是由两部分构成的,我们可以分治来计算。 s[1,n]在F(x)中出现的次数由...原创 2018-03-08 22:53:19 · 447 阅读 · 0 评论 -
codeforces 935E Fafa and Ancient Mathematics 语法树、动态规划
题解 一道很有意思的题目,同时把动态规划和语法树结合起来,很有新意,思路我是想出来了,但是我的写法较为麻烦,从别人的submission中找了一个写起来简介的代码分享给大家。 看到表达式的形式,我们可以想到使用语法树来解决,题目中限定了+号和-号的使用数目。但是对于一个节点来说,我们并不知道左子树中有多少个+号和-号,也不知道右子树中有多少个+号和-号。所以,就需要使用动态规划了。 ...原创 2018-02-20 15:06:20 · 1145 阅读 · 0 评论 -
codeforces 932E Team Work 高等数学求导、dp
题解 这是一道纯粹的数学求导题目。 首先我们先写出要求的公式。 ans=∑nr=1Crnrkans=∑r=1nCnrrkans = \sum_{r=1}^{n} C_n^{r}r^k 乍一看,雾草好吓人,但是学过高等数学且稍有常识的人(不是我)可以看出,这个可以由某个式子不断乘x并求导得出来。 没错,稍有常识的人又可以看出来了,这个式子就是(1+x)n(1+x)n(...原创 2018-02-19 17:38:13 · 397 阅读 · 0 评论 -
codeforces F.F. Teodor is not a liar! 最长不降子序列
题意给出一堆线段。 询问者每次可以询问一个整数点,回答者告诉询问者这个点被多少根线段包括。 问询问者最多问多少次,还不能确定任意一个整数点都不可能被所有的线段包含。题解首先用O(n)的方法计算出来每个点被多少条线段包含。 突破点: 我们考虑什么情况下不能确定存在整数点被所有线段包括。 反向思考:当存在一个点被所有的线段包括了,那么必定有 cnt(x1)<=cnt(...原创 2018-03-08 11:22:07 · 371 阅读 · 0 评论 -
codeforces 932D Tree 倍增法+二分搜索
题面叙述 题目给出两种操作: 操作1是将一个权重为W的点加到树的某个节点下。 操作2是询问一个从R开始的序列的最长可能长度。 其中这个序列要这样找:从R开始,沿着祖先方向往上找,凡是权重大于等于当前序列最后一个点的要被选上,然后更新序列。权重和要最大且小于X。题解 我们设定一个数组nxt[i]表示i的祖先中,第一个权重大于等于i的权重的节点。再定义一个数...原创 2018-02-18 19:39:31 · 327 阅读 · 0 评论 -
洛谷P1373 小a和uim之大逃离 动态规划
题解 我们可以先简单的想一种状态,也就是dp[i][j][x][y][t]dp[i][j][x][y][t]dp[i][j][x][y][t],这是最暴力的。 当t = 0时,表示小a处于(i,j)位置,其中小a拥有x魔液,uim拥有y的魔液时候的方案总数。t = 1的时候反过来,意义类似。 这样的话我们很容里列出转移方程(这里就不给出了),但是这样的话内存和时间上都会爆炸80...原创 2018-02-27 20:36:56 · 240 阅读 · 0 评论 -
codeforces D.MADMAX 动态规划、记忆化搜索
题意 给出一个DAG,每条边上有权重(权重是小写字母的ASCII码),现在两位同学A和B分别位于某两点上(可以相同),其中A和B轮流走,但是每人所走的边权不能变小,走到不能走为止就输。 A先走,询问最后谁会赢。题解 比较明显是一个DP,定义dp[i][j][c]表示轮到i点的人走,另一个人在j点,下一次要走的边的权重必须>=c,i点的人是否能赢。递推方原创 2018-01-30 20:01:04 · 261 阅读 · 0 评论 -
codeforces 831D Two Melodies dp具有启发意义
D. Two Melodiestime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputAlice is a beginner composer and now she is原创 2017-11-05 10:19:57 · 228 阅读 · 0 评论 -
codeforces gym-101745 D-Stamp Stamp Stamp动态规划
题解一道很不错的动态规划问题,首先这些印章一定是s的子串。 我们可以枚举s的子串然后进行check。 如何check,成了这道题的关键。由于盖章的顺序不知道,所以我们可以使用动态规划的方法。 我们定义状态: dp[i][j]dp[i][j]dp[i][j]表示的是sss串的前iii个被完美盖上,并且Stamp刚好盖到第jjj个,的bool值。这样最终的答案就是dp[len(s)...原创 2018-03-30 10:41:44 · 276 阅读 · 0 评论 -
codeforces gym-101741 Elevator 动态规划、单调队列
题目这里写链接内容题解注意:题目给出是按照时间给出的顺序。我们考虑第iii个人要上的楼高h[i]h[i]h[i],排在第iii个人前面的,所有要人上的楼高度≤h[i]≤h[i]≤h[i]的人都可以被合并在与第iii个人一起被传送上去。所以我们只需要考虑h[i]h[i]h[i]单调递减的序列就可以了,其它的人我们都可以删掉不看,因为它已经被合并了。例如: 一个hhh序列...原创 2018-04-07 22:01:11 · 368 阅读 · 0 评论 -
2018-2019 ACM—ICPC SEERC 题解
2018 - 2019 SEERC 题解比赛发出来太新了,网上根本就搜不到题解,补题补的太难受了.在这里分享一篇我自己写的题解,也方便别人补题.题目链接http://codeforces.com/gym/101964/attachments/download/7814/seerc-2018.pdfA.Numbers留坑.B.Broken Watch题解先考虑三个针长度各不...原创 2018-11-01 14:05:40 · 6105 阅读 · 2 评论 -
NCPC2018 D.Delivery Delays[二分答案+DP check]
Delivery Delays题意100010001000个点,500050005000条边的无向图,披萨店在111号店.100010001000份披萨订单,每个订单有下单时间,送达地点,披萨制作出来的时间.你是快递员初始在111号点,每次可以拿无穷多披萨,送完以后返回111号点继续送,送餐的时候要求按照下单顺序送达,求等待时间最长的顾客的最小等待时间.题解其实这道题不难,读题的时候读漏了...原创 2018-10-27 15:37:11 · 626 阅读 · 0 评论 -
Wannafly 挑战赛27 题解
Wannafly 挑战赛27题目连接https://www.nowcoder.com/acm/contest/215#questionA.灰魔法师题目题解考虑到可能的完全平方数只有400400400多个,因此对于每种数,直接暴力枚举所有的完全平方数计算一下就可以了.代码#include &lt;iostream&gt;#define int long longconst i...原创 2018-10-29 10:00:49 · 215 阅读 · 0 评论 -
HDU5322 - cdq分治FFT加速dp
5322 Hope [CDQ分治FFT计算计算dp]题意每一个每一个排列,排列中每个数向它后面第一个比它大的数连一条边.每个排列对于答案的贡献是这个排列所生成的图中的每一个联通量中点的个数的平方之积.例如:排列1,2,3,6,4,51,2,3,6,4,51,2,3,6,4,5其中1,2,3,61,2,3,61,2,3,6形成一个大小为444的联通分量.4,54,54,5形成一个大...原创 2018-10-21 00:24:39 · 295 阅读 · 0 评论 -
Wannafly挑战赛24
Wannafly挑战赛24题目连接https://www.nowcoder.com/acm/contest/186#questionA.石子游戏题解注意到当石子个数为偶数的时候,每回合都会减少一堆偶数石子,因此,先手必胜.我们可以不考虑奇数堆石子,因为必胜方始终可以动偶数堆.当必败方将奇数堆分成一堆偶数和一堆奇数的时候,必胜方将新生成偶数堆移动到原有的偶数堆中即可抵消对方的移动....原创 2018-10-20 10:41:21 · 180 阅读 · 0 评论 -
Wannafly挑战赛26 题解
Wannafly挑战赛26题目连接https://www.nowcoder.com/acm/contest/212#questionA. 御坂网络枚举圆心所在的位置,O(n)O(n)O(n) 检查即可,总时间复杂度为O(n2)O(n^2)O(n2)B. 冥土追魂这题比较坑,我感觉题意叙述有问题,总之也是一道水题,题解略去.C. 七彩线段题解考虑到只有777种颜色,因此可以枚举最后...原创 2018-10-19 08:23:42 · 273 阅读 · 0 评论 -
虚树-树上动态规划的利器
虚树问题引入在一类树上动态规划问题中,题目给出的询问往往包含树上的很多各节点,并保证总的点数规模小于某个值.如果我们直接在整颗树上进行dpdpdp的话,时间复杂度与询问的次数有关,这显然是不可接受的,如果我们可以找到一种动态规划的方法,使其时间复杂度与询问中点的实际规模相关就好了.于是虚树应运而生.虚树概念虚树即是一颗虚拟构建的一棵树,这个树只包含关键点以及关键lc...原创 2018-09-17 16:34:31 · 8453 阅读 · 5 评论 -
CERC2017 Gambling Guide,最短路变形,期望dp
题目链接题面链接题意给定一个无向图,你需要从111点出发到达nnn点,你在每一点的时候,使用111个单位的代价,随机得到相邻点的票,但是你可以选择留在原地,也可以选择使用掉这张票,问到达nnn点的最小代价的方案的期望是多少。题解我们先假定在最优方案下从每个点xxx出发,到达nnn点的代价的期望为exexe_x,那么显然,我们可以列出方程ex=∑min(ex,ey)degx+...原创 2018-06-03 17:37:06 · 879 阅读 · 0 评论 -
P2468 [SDOI2010]粟粟的书架 动态规划,主席树,二分答案
题目洛谷题目链接题解题目的数据范围非常奇怪,一半是200∗200200∗200200*200的矩阵,另一半是1∗500001∗500001*50000的矩阵,显然是一道二合一的题目,但是不一样的地方也就在与数据结构的选择不一样,而我们解这道题使用的算法是一样的,即都是二分法。这道题所需要的数据结构应该能提供如下的功能:在O(1)O(1)O(1)或O(logn)O(logn)O(...原创 2018-05-07 16:56:08 · 214 阅读 · 0 评论 -
2017 ACM Jordanian Collegiate J.Efficiency Test 动态规划、类倍增
题目题目链接题解及代码#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N = 1e5+7;int f[2*N][55],a[2*N],sum[2*N],ans[2*N],pb[2*N];int T,n,k;...原创 2018-05-17 22:02:07 · 136 阅读 · 0 评论 -
洛谷P2501数字序列 动态规划
题目题目链接题解这道题目我觉得是神题,非常有意思的题目,也挺难做的。第一问:求最少需要改变的数量这一问比较简单,之前也见过这种套路。 定义dp[i]dp[i]dp[i]表示aaa序列中a[1,i]a[1,i]a[1,i]部分构成严格递增子序列且以a[i]a[i]a[i]为结尾所不需要改变的最大的数量。 那么转移方程就是: dp[i]=min1≤j<i,a[i...原创 2018-04-19 13:30:05 · 285 阅读 · 0 评论 -
洛谷-省选斗兽场-动态规划1
记练习一下动态规划水题系列,防止脑子生锈。P1879 玉米田题解非常典型的状态压缩DPDPDP,先预处理出所有可行的状态SSS。 然后逐行DPDPDP,定义状态dp[i][S]dp[i][S]dp[i][S]表示的含义是前iii行满足条件,并且第iii行的状态为SSS,可行的方案数。然后状态转移:dp[i+1][nS]=∑nS与pS=0且nS可行dp[i][pS]dp...原创 2018-04-16 23:32:56 · 302 阅读 · 0 评论 -
闲来无事刷水题、简单博弈论专题、sg函数、洛谷
记今天闲来无事,不想刷codeforces了,到洛谷提高组训练营找几道水题刷着玩玩(虽然自己早已过了打OI的年纪)~简单博弈论专题P1199 三国游戏这么考虑,由于电脑总是不能让我搭配出当前能搭配出的最大的组合,也就是说我不管选哪个英雄,都不可能匹配出该英雄能搭配出的最大的默契值,那么我最大能搭配出的默契值就是所有英雄匹配中,次大默契值的最大值。 假设有a、b、c、da、...原创 2018-03-15 15:35:46 · 621 阅读 · 0 评论 -
动态规划训练10 [Coloring Brackets CodeForces - 149D]
西安交大 软件53 蔡少斐 整理Coloring Brackets CodeForces - 149D 题目大意:给定合法的括号序列,让你给括弧上色,并且上色时一定要满足3个要求:(1)每个括号要么被上红色,要么被上蓝色,要么不上色。(2)一对匹配的左右括弧,有且只有其中的一个可以被上色。(3)相邻的括弧不能被涂上相同的颜色。原创 2017-06-22 15:10:02 · 277 阅读 · 0 评论 -
Juice Extractor dp
题意:水果忍者游戏,给出N个水果的出现时间和消失时间。每次切可以清除该时刻中屏幕上的所有水果,只有combo>=3的时候才得分,得分为combo的值。题解:可以把每个水果看成是一段时间区间。然后把这些区间按照出现时间为第一关键字,消失时间为第二关键字排序。我们定义dp方程dp[i]表示最后一刀切掉第i个水果,所获得的最大积分。那么,最优的方案肯定是在第i个水果出现时间进原创 2017-10-09 10:24:53 · 264 阅读 · 0 评论 -
动态规划训练12 [G - You Are the One HDU - 4283 ]
2012天津区域赛的一道题目,题目链接如下You Are the One HDU - 4283 这道题目要说思想的话其实并不是很难,但是我却没做出来。关键就在于读题读不懂(How Vegetable I am!),到最后搜了别人的题解才明白这道题想要说什么:题目大意就是说给定一个有序序列和一个栈,对于队伍前头的一个人,有两个操作,一个是直接迈向舞台,另一个操原创 2017-06-22 18:51:03 · 242 阅读 · 0 评论 -
动态规划训练11 [String painter HDU - 2476]
String painter HDU - 2476 题意:我认为这是一道比较难的问题,自己想了很久,没有想出来怎么做,可能是因为思维僵化吧,一直在想怎么直接的由A变到B,事实上,可以有中间桥梁连接A和B,他们之间的关系可能往往没有我们想的那么简单。依最简单的思路,我们定义ans[i]代表区间[1...i]处,A直接变到B所需的最少次数。那么状态转原创 2017-06-22 15:44:01 · 301 阅读 · 0 评论 -
动态规划练习2 [合唱队形]
N 位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K 位同学排成合唱队形。合唱队形是指这样的一种队形:设 K 位同学从左到右依次编号为1, 2…,K,他们的身高分别为 T1,T2,…, TK, 则他们的身高满足T1Ti+1>… >TK(1。你的任务是,已知所有 N 位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。原创 2017-06-20 17:34:20 · 1449 阅读 · 0 评论 -
动态规划练习3 [砝码称重]
【问题描述】设有 1g、 2g、3g、 5g、10g、 20g的砝码各若干枚(其总重),用他们能称出的重量的种类数。【输入文件】a1 a2 a3 a4 a5 a6(表示 1g 砝码有a1 个, 2g砝码有 a2 个,…,20g 砝码有 a6个,中间有空格)。【输出文件】Total=N( N 表示用这些砝码能称出的不同重量的个数,但不包括一个砝原创 2017-06-20 17:48:51 · 1969 阅读 · 0 评论 -
动态规划训练5 [回文词]
【问题描述】回文词是一种对称的字符串——也就是说,一个回文词,从左到右读和从右到左读得到的结果是一样的。任意给定一个字符串,通过插入若干字符,都可以变成一个回文词。你的任务是写一个程序,求出将给定字符串变成回文词所需插入的最少字符数。比如字符串“ Ab3bd”,在插入两个字符后可以变成一个回文词(“dAb3bAd”或“ Adb3bdA”)。然而,插入两个以下的字符无法使原创 2017-06-20 18:36:41 · 839 阅读 · 0 评论 -
动态规划训练6 [统计单词个数]
【问题描述】给出一个长度不超过 200 的由小写英文字母组成的字母串(约定:该字母串以每行20 个字母的方式输入,且保证每行一定为 20 个)。要求将此字母串分成k 份(1,且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串this中可包含 this 和 is,选用this 之后就不能包含原创 2017-06-20 18:47:41 · 649 阅读 · 0 评论 -
动态规划训练8 [E - Multiplication Puzzle POJ1651]
Multiplication Puzzle POJ - 1651 题意:在一个序列中,拿走一个数字,那么得分就是这个数字以及它相邻的两个数字,这三个数字的乘积。求最小得分。这道题乍一看感觉是区间DP,但是需要逆向思考的技巧。记dp[i][k]表示以i开头的,长度k的区间。我们考虑一个区间的时候,记录区间的两个端点分别为l,r。这个区间两侧的端点是不能原创 2017-06-22 14:29:12 · 201 阅读 · 0 评论 -
动态规划训练9 [Brackets POJ - 2955 ]
Brackets POJ - 2955 再明显不过的区间DP的题目了,要求求出给出符号式中最大匹配的括号数。考虑区间[l,r],如果str[l]与str[r]匹配了,那么转移方程为dp[l][r] = max(dp[l][r],dp[l+1][r-1]+ 2);然后考虑将区间分成2部分dp[l][r] = max(dp[l][r],dp[l][k]+dp[k+1原创 2017-06-22 14:32:07 · 195 阅读 · 0 评论 -
动态规划训练7 [Halloween Costumes ]
Gappu has a very busy weekend ahead of him. Because, next weekend is Halloween, and he is planning to attend as many parties as he can. Since it's Halloween, these parties are all costume parties, G原创 2017-06-22 14:05:01 · 249 阅读 · 0 评论