
动态规划DP
逐梦起航-带梦飞翔
为了更加长远的快乐!
展开
-
bzoj1037 [ZJOI2008]生日聚会Party
刷题记录:bzoj1037 [ZJOI2008]生日聚会Party 详解疑惑:DP必须这样吗?不能用原始的方式吗?原创 2017-12-22 20:55:41 · 304 阅读 · 0 评论 -
poj1038 Bugs Integrated, Inc.(状压DP)
题意在空余位置放入尽量多的2*3或3*2的矩形。题解状压DP对于横着0,1没问题,对于竖着的,还需要一个2,所以状态就用三进制来表示。对于一个横着的矩形:1 1 10 0 0对于一个竖着的矩形:2 21 10 0当上一行的状态为0时,这一行才可以放新的矩形。实现时,可以在确定旧状态之后,搜索一个合法的新状态出来,这对于限制条件很多的时候很适用。代码#in...原创 2018-09-27 13:27:00 · 254 阅读 · 0 评论 -
bzoj1911 [Apio2010]特别行动队(斜率优化)
题目bzoj 1911 [Apio2010]特别行动队题解斜率优化DP设f[i]表示前i个士兵最大战斗力之和,有 去掉max,把仅与j有关的移到一边,另一边放与仅与i有关的或和i、j都有关的,得 根据上式,斜率为,决策点坐标为,截距为。因为要求截距...原创 2018-09-28 15:02:23 · 241 阅读 · 0 评论 -
洛谷1073 最优贸易(spfa)|(分层图)
题目C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为 1 条。C 国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同。但是,同一种商品在同一个城市的买入价和卖出价始终是相同的。商人...原创 2018-04-21 13:25:34 · 394 阅读 · 0 评论 -
bzoj1079 [SCOI2008]着色方案(计数类DP)
题目有n个木块排成一行,从左到右依次编号为1~n。你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块。所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n。相邻两个木块涂相同色显得很难看,所以你希望统计任意两个相邻木块颜色不同的着色方案。(100%的数据满足:1 <= k <= 15, 1 <= ci <= 5)题解计数类DP看到ci如此小,...原创 2018-09-29 13:18:34 · 336 阅读 · 0 评论 -
洛谷2187 小Z的笔记(DP)
题目由于没有好好听课,小Z的笔记全都记的杂乱无章,出现了好多错误的地方。小Z的笔记是如此的糟糕,以至于他只记了一句例句,而且自己还不知道是什么意思……然后在老师讲语法的时候,小Z又零星的记了几个字母对,老师说,这几个字母对是绝对不能相邻的,而且相邻是不关心字母的顺序的,比如老师说,“ab”不能相邻,那么相同的,“ba”也不能相邻。现在小Z到家了,打开了上课的笔记,然后他发现笔记有很多自相矛盾...原创 2018-10-18 14:40:37 · 265 阅读 · 0 评论 -
洛谷3287 [SCOI2014]方伯伯的玉米田(DP)(树状数组)
题目方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美。这排玉米一共有N株,它们的高度参差不齐。方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列。方伯伯可以选择一个区间,把这个区间的玉米全部拔高1单位高度,他可以进行最多K次这样的操作。拔玉米则可以随意选择一个集合的玉米拔掉。问能最多剩多少株玉米,来构成一排...原创 2018-10-16 13:27:16 · 325 阅读 · 0 评论 -
洛谷3463 [POI2007]EGZ-Driving Exam(DP)(树状数组)
题目成都的驾驶考试在一个有n条平行的自南向北的单向的道路的场地中进行。每条道路长度为m米,并且都在同一条水平线上开始和结束。街道从西向东分别编号为1到n。同样有p条单向的自西向东或自东向西的街道垂直于上面描述的街道,每一条这样的街道链接了两个相邻的自南向北的道路。当然自西向东和自东向西的道路可以重叠,那就是一个双向的街道了。考生选择一个自南向北的道路作为他考试的起始点和另外一个自南向北的道路...原创 2018-10-16 14:14:20 · 296 阅读 · 0 评论 -
洛谷3146 [USACO16OPEN]248(DP)
题意给定一个1*n的地图,在里面玩2048,每次可以合并相邻两个(数值范围1-40),问最大能合出多少。注意合并后的数值并非加倍而是+1,例如2与2合并后的数值为3。歪解记忆化搜索设f[l][r][x]表示(l,r)能不能合成x这个数,那么就有f[l][r][x]|=f[l][k][x-1]&f[k+1][r][x-1]。然后从大到小枚举x,再枚举个左端点和右端点,判断一下...原创 2018-10-17 13:26:31 · 406 阅读 · 0 评论 -
洛谷2889 [USACO07NOV]挤奶的时间Milking Time(DP)(树状数组)
题意奶牛Bessie在0~N时间段产奶。农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e。奶牛产奶后需要休息R小时才能继续下一次产奶,求Bessie最大的挤奶量。如果在(si,ti)时刻挤奶,那么休息完的时间是si+r,即下一次可以挤奶的最早时间是(si+r,...)。题解DP+树状数组设f[i]表示在第i小时结束挤奶时收获的最大奶量。有如下DP方程可以用...原创 2018-10-17 13:49:16 · 346 阅读 · 0 评论 -
洛谷1970 花匠(DP)
题意找一个高低循环的最长XX序列。题解DP设f[i]表示以i为结尾的最长XX序列,其中i在高位。设g[i]表示以i为结尾的最长XX序列,其中i在低位。这两个可以相互转移,即f[i]=max_{i>j,a[i]>a[j]}{g[j]}+1,同样g也有一个转移方程。接下来用树状数组维护一下max就可以得到50分了。如何优化呢?更改一下定义:设f[i]表示前i个数...原创 2018-10-23 13:30:47 · 202 阅读 · 0 评论 -
洛谷4187 [USACO18JAN]Stamp Painting(DP)
题目洛谷4187 [USACO18JAN]Stamp Painting特性一个合法的最终状态应该至少有一块长度为k。题解DP根据特性,可以转化题意。但是仍然不好求。不好求,怎么办?那把AK跟他干,干不过,怎么办?认(mo)怂(ti)把(jie)不妨反过来想,用总状态数-不合法状态数=合法状态数总状态=n^m不合法状态可以递推,设f[i]表示前i的长度中长度小于k的方案...原创 2018-10-27 10:01:47 · 339 阅读 · 0 评论 -
poj2282 The Counting Problem(数位DP)
题目给定[l,r]输出其中每个数位上的数字出现的次数。(下面所指的“数字”均指的是0,1,2,3,…,9)。题解数位DP爽!第一道自己做出来的数位DP!!!设f[i]表示i位数字中,一个数字出现的次数(首位可以为0);则有f[i]=f[i-1]*10+10^(i-1)的递推式。数字0是比较特殊的,我们要单独为其设立g[i],表示首位不为0的出现次数;则有g[i]=g[i-1]+f...原创 2018-09-27 13:17:15 · 336 阅读 · 0 评论 -
洛谷3257 [JLOI2014]天天酷跑(DP)(记忆化搜索)
题目每次往上跳或往下掉或持平……(具体看题目吧),使路径上的权值和最大。题解记忆化搜索设f[i][j][t]表示从出发点到(x,y)这个位置(不含这个位置,即减掉ma[x][y])还可以跳t次的最大权值和。转移方程,其中w表示这一路上的点权和。下面说说前辈绕的弯路,注意一下输入,第一行是底~再注意一点,回到底后可以重置可跳次数~考虑细致一点,这题还是不难的~代码...原创 2018-10-11 22:16:33 · 305 阅读 · 0 评论 -
bzoj1055 [HAOI2008]玩具取名
bzoj1055 [HAOI2008]玩具取名区间动态+记忆化搜索dp时做如下2件事:1、如果状态已经处理过,则不必重复处理;2、判断状态能否成立:枚举能变换成该字符的所有可能,其中要用到某区间能否变成k这个字符,直接调用dp函数来计算,这就是记忆化搜索的精髓。原创 2017-12-23 13:38:58 · 219 阅读 · 0 评论 -
对动态规划DP的深入理解
dp其实是一种思想,而不是一种算法。它的核心就是一空间换时间。通过对所有状态的最优解的记录,再通过某种递推关系,得到最终解。用查询的方式代替重新计算,从而降低时间复杂度。说到时间复杂度,dp的时间复杂度有一个统一的表示:状态数*得到每个状态最优解的时间。由于这些核心的思想,决定了dp的题目应该具备一些特征:1、最优子结构:最优子结构就是局部最优能够决定整体最优。即:我们要解决的一个困难的大问题,能...转载 2017-12-23 16:22:16 · 948 阅读 · 3 评论 -
bzoj1026 [SCOI2009]windy数
题目描述windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数?【正解】DP+拆分求解思路:快速求出1~n和1~m中的windy数的个数,然后作差。这是前缀和的思想。其中再求1~每个数的windy数时要运用到拆分的思想。第1步:预处理出一定长原创 2017-12-23 13:31:23 · 269 阅读 · 0 评论 -
poj1050 To the Max(DP)
题意给一个n*n的矩阵,求最大子矩阵和。 我的想法这种子矩阵和的问题一般都是用个前缀和来求,一算复杂度O(n^4),一下子没了头绪。其实这题不用前缀和。 题解DP我们枚举st,ed两行,把其间的行全部压缩成一行,求以st和ed为两边的最大子矩阵和的问题,就转为求这个和数组的最大子串。求一个序列的最大子串和很简单,作为基础知识应该懂的。这样做的时间复杂度为O(n^...原创 2018-08-01 20:25:42 · 259 阅读 · 0 评论 -
poj2279 Mr. Young's Picture Permutations(线性DP)
题目一个k行,每行n[i]个数字的容器。给出Σn[i]个数字,填入该容器,使得每一行递减,每一列递减。求方案数。(k<=5,Σn[i]<=30)思考一般人会去思考,给第(i,j)填x的方案数。这样问题就很复杂了,因为当填(i,j)时,要考虑(i-1,j)和(i,j-1)两个格子的数字,而DP又不便记录。我们换一种想法,先说说一种朴素做法。记目前每行已填了(a[1],a[2...原创 2018-09-17 11:22:07 · 377 阅读 · 0 评论 -
CH5302 金字塔(区间DP)
题目虽然探索金字塔是极其老套的剧情,但是有一队探险家还是到了某金字塔脚下。经过多年的研究,科学家对这座金字塔的内部结构已经有所了解。首先,金字塔由若干房间组成,房间之间连有通道。如果把房间看作节点,通道看作边的话,整个金字塔呈现一个有根树结构,节点的子树之间有序,金字塔有唯一的一个入口通向树根。并且,每个房间的墙壁都涂有若干种颜色的一种。探险队员打算进一步了解金字塔的结构,为此,他们使用了一...原创 2018-09-18 22:27:57 · 962 阅读 · 2 评论 -
洛谷CF311B Cats Transport(DP)(斜率优化)
题目洛谷CF311B Cats Transport题解斜率优化设的距离为,即。先转换一下模型。对于第i只猫,饲养员要在t[i]-D[i]之后出发,才能把它带回家。故我们设数组,问题就转换成了在A数组中分成p组,每组(l,r)的代价是。为了方便操作,对A进行递增排序。同时,记录其前缀和S。在此基础上,设f[i][j]表示出动j个饲养员带走前i只猫的最小等待时间。转移方程:...原创 2018-09-25 10:48:00 · 403 阅读 · 0 评论 -
CH5A01&BZoj2726 任务安排(DP)(斜率优化)
例题CH5A01 任务安排1题解1DP设f[i][j]表示把前i个机器分成j批修理的最小费用,St,Sc分别对应数组t和c的前缀和。容易写出一个O(n^3)的DP方程:但是这个方法显然不够优秀。我们可以考虑去掉分成j批这一维,并用“费用提前计算”的思想来维护新的f。方程如下: 题解2DP+斜率优化我们把i看做定量,j看做变量,然后把所有仅与j有关的(决...原创 2018-09-25 12:00:54 · 345 阅读 · 0 评论 -
bzoj1212 [HNOI2004]L语言(DP+AC自动机)
题目求模式串对主串的最大匹配长度。题解DP+AC自动机设f[i]=true表示前i位可以匹配出来,那么转移方案就是背包的,(要求:主串的后缀与模式串j完全一致),其中len[j]是一个模式串的长度。如果要是大(bao)力DP的话,显然会很慢,因为我们要配对每一个模式串。显然这种后缀配前缀的问题应当交由AC自动机来处理。把匹配串逐一insert到字典树中,同时标记一下结尾,求一个...原创 2018-10-11 09:35:45 · 222 阅读 · 0 评论 -
poj2374 Fence Obstacle Course(DP)(线段树)
题目poj2374 Fence Obstacle Course题解线段树优化DP设f[i][0/1]表示在通过第i条栅栏后,处于栅栏左边/右边的最小路径长。因为奶牛是直线下来的,所以最优方案当然是从上一个栅栏的这个位置下来。由于有栅栏的影响,奶牛们不能顺利的下来,此时到达这个位置的最优策略要么是从前面那个栅栏的左端点过来,要么从右端点过来。所以有,。其中的j就是上一个挡住了这个位...原创 2018-10-03 16:46:49 · 417 阅读 · 0 评论 -
树的直径—求法
先给出树的直径的定义:一棵树中任意两点间的路径叫“链”,最长的链称作树的直径。树的直径并没有明确指明是一个距离还是一段路径,其实两者都可以用“树的直径”来称呼。具体求树的直径我们有两种方法,一种用DP,一种用dfs,它们的时间复杂度都是O(N)。 树形DP法设数组D[i]表示从节点i出发往子树方向走的最长距离,F[i]表示以节点i为转折点的最长链。显然ANS=max{F[i]}。仔...原创 2018-10-03 21:12:54 · 1426 阅读 · 0 评论 -
洛谷1280 尼克的任务(倒推DP)
题目尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成。尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束。当尼克到达单位后他就开始干活。如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去完成,假如某些任务开始时刻...原创 2018-11-06 12:49:53 · 266 阅读 · 0 评论