
动态规划
文章平均质量分 61
nymph181
这个作者很懒,什么都没留下…
展开
-
【区间dp】P7914 [CSP-S 2021] 括号序列
题意()、(S) 均是符合规范的超级括号序列,其中 S 表示任意一个仅由不超过kkk个字符∗*∗组成的非空字符串(以下两条规则中的 S 均为此含义);如果字符串 A 和 B 均为符合规范的超级括号序列,那么字符串 AB、ASB 均为符合规范的超级括号序列,其中 AB 表示把字符串 A 和字符串 B 拼接在一起形成的字符串;如果字符串 A 为符合规范的超级括号序列,那么字符串 (A)、(SA)、(AS) 均为符合规范的超级括号序列。所有符合规范的超级括号序列均可通过上述 3 条规则得到。现在给出原创 2021-11-16 19:42:11 · 776 阅读 · 0 评论 -
【树形dp】W
题面题意给出一棵树,每条边有初始状态。对一条路径上的边的状态进行翻转,求每条边满足结果且操作数最少,最小的操作边数之和。思路设f[i][0/1]表示i与fa[i]的边是否需要翻转时的答案。枚举每个儿子,判断儿子与i的边是否处于同一个操作次数(等方案)进行转移。代码#include <vector>#include <cstdio>#include <stdlib.h>#include <algorithm>const std::pai原创 2020-08-12 22:06:27 · 247 阅读 · 0 评论 -
【动态规划】【区间dp】luogu_4170 [CQOI2007]涂色
题意对长度为n的木板涂色,每次涂色会覆盖之前涂过的区域,给出涂色目标木板,求出最少的涂色次数。思路设f[i][j]为涂好了i~j的最少次数,那么:f[i][j]=min{f[i][j-1],f[i+1][j]} (col[i]==col[j]),即一开始可以从i~j-1或i+1~j多涂一格f[i][j]=min{f[i][k]+f[k+1][j]},即分成两部分涂色代码#includ...原创 2020-01-16 15:46:54 · 286 阅读 · 0 评论 -
【动态规划】CF9D How many trees?
题意用n个点组成二叉树,问高度大于等于h的有多少个。思路设f[i][j]为i个节点时高度不超过j的二叉树个数,那么f[i][j]=f[k][j-1]*f[i-k-1][j-1],即选出一个根节点,两边连高度不超过j-1的子树求高度大于等于h,即f[n][n]-f[n][h-1]代码#include <cstdio>int n, h;long long f[36][3...原创 2020-01-16 15:37:34 · 267 阅读 · 0 评论 -
【动态规划】luogu_2051 [AHOI2009]中国象棋
动态规划原创 2019-11-11 20:52:17 · 187 阅读 · 0 评论 -
【JZOJ比赛】2019.11.11 JZOJ B组
练习赛原创 2019-11-11 20:13:26 · 242 阅读 · 1 评论 -
【动态规划】luogu_4265 [USACO18FEB]Snow Boots S
简单动态规划原创 2019-11-05 08:08:17 · 208 阅读 · 0 评论 -
【动态规划 字符串】JZOJ_4227 B
题意给出一个后缀数组,以及每个位置上填某个字母的价值,求出最大的价值总和。思路根据后缀数组的性质,我们可以设fi,jf_{i,j}fi,j为第AiA_iAi个位置上填字母jjj的最大价值。得出动态转移方程:fi,j=max(fi,j,fi−1,k+wAi,j){k&lt;j}f_{i,j}=max(f{i,j},f{i-1,k}+w_{A_{i,j}})\{k&lt;...原创 2019-01-28 20:51:36 · 230 阅读 · 0 评论 -
【状压dp】JZOJ_5230 队伍统计
题意现在有nnn个人要排成一列,编号为1∼n1\sim n1∼n 。有mmm条矛盾关系(u,v)(u,v)(u,v),表示编号为uuu的人想要排在编号为vvv的人前面。要使得队伍和谐,最多不能违背kkk条矛盾关系(即不能有超过kkk条矛盾关系(u,v)(u,v)(u,v),满足最后vvv排在了uuu前面)。问有多少合法的排列。答案对1e9+71e9+71e9+7取模。思路nnn的范围很小...原创 2019-01-27 20:02:22 · 195 阅读 · 0 评论 -
【多重背包】JZOJ_4224 食物
题目思路因为食物是可以分开放的,所以我们可以分别计算两个问题。1、食品美味程度达到ppp。2、选择运载工具使得费用最小且能装下这些食品。那么第一个问题就是多重背包。第二个问题也是多重背包,因为第一问的答案可能很大,那么我们就要把状态和答案调换,设f[j]f[j]f[j]为用了jjj元用运载工具可以得到得最大空间。然后二进制拆分或者单调队列优化就能过掉这题了。代码#include...原创 2019-01-26 19:05:37 · 214 阅读 · 0 评论 -
【动态规划】JZOJ_4245 er
题意有nnn个东西(n&lt;=2)(n&lt;=2)(n<=2),我们有kkk种符文可以改变某个东西的价值。有三种符文形式如下:1、赋值强化符文,直接把一个东西赋值为一个常数。2、加法强化符文,把一个东西加上一个常数。3、乘法强化符文,把一个东西乘上一个常数。最多能用kkk个符文,求出按某种顺序用某些符文后这nnn个东西的乘积的自然对数最大。思路首先有log...原创 2019-01-29 20:36:46 · 215 阅读 · 0 评论 -
【动态规划 贪心】JZOJ_4249 游戏
题意一个人从起点000出发。他现在如果在iii,那么如果跳到jjj,那么获得的价值为(j−i)∗aj(j-i)*a_j(j−i)∗aj。求刚好落到终点nnn的最大可获得的价值。思路刚开始看到就想到O(n2)的dpO(n^2)的dpO(n2)的dp,结果看了下数据发现只能拿606060分,正解是斜率优化(当然我这么菜怎么可能打 )。可以用贪心,我们每次从iii跳都直接跳到后面最大的aj...原创 2019-01-30 21:49:06 · 176 阅读 · 0 评论 -
【动态规划】SSL_1296 猫咪的进化
题意在nnn个时间单位里,每个单位内有一个值vvv,当前时间可以选择沉默、叫一声或叫两声。如果选择叫两声,那么下一个时间单位就必须沉默,叫一声能得到vvv点能量,叫两声能得到v∗vv*vv∗v点能量。求出最大能获得的能量。思路动态规划。设f[i][j]f[i][j]f[i][j]代表当前时间叫jjj声最大能获得的能量,然后还可以滚动一下。代码#include<cstdio>...原创 2019-03-02 16:41:30 · 363 阅读 · 0 评论 -
【树形dp】JZOJ_1029 电子眼
题意给出一个nnn个点nnn条边的图,求出选择最少的点使得图中每条边覆盖(被选中的点连着)。思路树形动态规划。设f[x][0/1]f[x][0/1]f[x][0/1]表示这个点为根时选或者不选的最小选择点数。由题意可知一个点不选时,他的儿子必须都选;选时儿子可选可不选。注意因为有环,所以先把做出的答案存着,结束了再更新fff。代码#include<cstdio>#in...原创 2019-04-13 07:28:14 · 299 阅读 · 0 评论 -
【动态规划】JZOJ_1857 最大值
题意如果一个包含NNN个元素的数组aaa里面的元素的值是在1...K1...K1...K之间的整数,存在多少个不同的数组aaa,进行取最大值操作,刚好进行了PPP次更新,答案对1e9+7取模。思路设f[i][j][k]f[i][j][k]f[i][j][k]为前iii个数,最大值为jjj,进行了kkk次更新的方案数。可得f[i][j][k]=f[i−1][j][k]∗j+f[i−1][1....原创 2019-04-13 07:34:02 · 348 阅读 · 0 评论 -
【动态规划】JZOJ_1274 游历的路线
题意给出一张图,每条边每天都有一个权值,如果是000就代表没有连边。求出从111号节点走MMM天到达NNN号节点的最短路。思路NNN和MMM的范围很小,所以我们可以用O(N2M)O(N^2M)O(N2M)的动态规划。设fi,jf_{i,j}fi,j为从起点走iii天到jjj点的最短路,转移显然。代码#include<cstdio>#include<cstring...原创 2019-01-26 18:52:50 · 228 阅读 · 0 评论 -
【BST 中序 LIS】JZOJ_3894 洛谷_3365 改造二叉树
题意给出一棵二叉树,它每个节点上的权值都是整数,我们可以把一个节点上的值任意修改,算作一次修改。求出把这棵二叉树变成BSTBSTBST的最少修改次数。思路根据题目的性质,BSTBSTBST的左孩子&amp;lt;&amp;lt;&lt;根&amp;lt;&amp;lt;&lt;右孩子,能容易发现它的中序遍历应该是一个严格递增的序列。我们求出给出的二叉树的中序遍历,考虑如何修改最少的点使得这...原创 2019-01-26 07:38:21 · 253 阅读 · 0 评论 -
【动态规划】洛谷_1156 垃圾陷阱
题意一头牛在一个深度为DDD的坑里,有GGG个垃圾在不同的时间落下,每个垃圾有高度和能量,奶牛可以选择吃掉或者堆起来,如果奶牛可以出坑,那么求最早出坑的时间,否则求能活到多久。思路类似背包的动态规划。我们设f[i]f[i]f[i]为垃圾高度为iii时的最大生命值,然后就很好做了。代码#include<cstdio>#include<algorithm>st...原创 2018-10-06 08:14:45 · 161 阅读 · 0 评论 -
【动态规划】洛谷_1077 摆花
题意给出NNN种花,其中第iii种花的数量不能超过aia_iai个,求一共摆MMM个花的方案数模1000007。思路动态规划。设f[i][j]f[i][j]f[i][j]为前iii种花摆jjj个的方案数,可得动态转移方程:f[i][j]+=f[i][j−k]{k&lt;=a[i]}f[i][j]+=f[i][j-k]\{k&lt;=a[i]\}f[i][j]+=f[i][...原创 2018-10-28 15:18:53 · 313 阅读 · 0 评论 -
【动态规划】SSL_1231 Gift
题意给出NNN个物品,现在有MMM元,求买这NNN个物品的方案总数使得每个方案都不能再买一个东西,答案模1e7+7。思路把NNN个物品排序先,用f[i][j]f[i][j]f[i][j]表示i+1∼Ni+1\sim Ni+1∼N这些物品花费了jjj元的方案数,可以转移过来:f[i][j]+=f[i+1][j]+f[i+1][j−x[i]]f[i][j]+=f[i+1][j]+f[i+1][...原创 2018-10-29 07:56:40 · 148 阅读 · 0 评论 -
【动态规划】SSL_1247 A
简单动态规划。原创 2018-10-29 14:55:18 · 145 阅读 · 0 评论 -
【动态规划】SSL_1255 B(轻功)
简单动态规划。原创 2018-10-30 14:09:13 · 182 阅读 · 0 评论 -
【动态规划】洛谷_5017 摆渡车
题意有NNN个人要坐车,已知车往返一趟要mmm分钟,还有每个同学去等车的时间,求出最少的等待时间总和。思路一看到这个题就觉得是动态规划,不过水平有限,考场上没做出来,之后看了题解才会做的。我们可以把时间看成一个数轴,如这个洛谷上题解的图把这个数轴分成若干的长度≥M\geq M≥M的段,那么等待时间总和就为每一段上所有点到这一段右端点的距离总和。代表从右边这个端点开始出发。那么我们设f[...原创 2018-11-24 16:23:53 · 904 阅读 · 0 评论 -
【最短路 动态规划】洛谷_1948 电话线Telephone Lines
题意给出一个图,求出其中一条从点111到点NNN的路径,在上面选掉KKK条边,使得剩下的边中最大的最小。思路这个题其实是求出一条111到NNN的路径中使得第K+1K+1K+1的边最小。解法一:首先看到字样“最大的最小”,我们可以感觉这个题可以用二分,然后细读一下发现答案满足单调性。当我们二分出一个midmidmid,可以求出这个图中从111到NNN的路径中大于midmidmid的边的个...原创 2018-11-30 20:04:25 · 378 阅读 · 0 评论 -
【树形dp】JZOJ_3914 人品问题
题意给出一棵树。一个节点至多有两个祖先,如果选了某个祖先,那么它的后代必须要选一个。每个点上有一个权值,求出从111号节点取KKK个祖先的最大总权值。思路很明显的树形动态规划,数据较小,这里打了O(N3)O(N^3)O(N3)的做法。设f[i][j]f[i][j]f[i][j]为第iii个点选了jjj个祖先的最大权值,那么我们可以枚举祖先的选祖先的个数进行转移。答案就为f[1][k]f[...原创 2019-01-24 20:03:58 · 198 阅读 · 0 评论 -
【背包】SSL_1317 灵魂分流药剂
题意二维费用的分组背包。思路套模板即可。代码#include<cstdio>#include<algorithm>struct node{ int w, v, t, p;}c[111];int s[15], tt[15], f[15][111][111];int n, m, a, b, ans;int cmp(node x, node y) {...原创 2019-04-27 14:07:35 · 422 阅读 · 1 评论 -
【动态规划】CH_0103 最短Hamilton路径
题意给出一张n(n≤20)n(n \leq 20)n(n≤20)个点的带权无向图,求出起点0到终点n-1的最短Hamilton路径。Hamilton路径的定义是从0到n-1不重不漏的经过每个点恰好一次。思路二进制压缩每个点走过的情况,进行转移。设f[i][j]f[i][j]f[i][j]为当前状态为iii,停在点jjj的最短路径,可以得出转移方程:f[i][j]=min(f[i][j]...原创 2019-05-04 09:51:15 · 329 阅读 · 0 评论 -
【动态规划 LIS】JZOJ_6310 glo
对着std nh后性感解理原创 2019-08-20 20:43:34 · 185 阅读 · 0 评论 -
【动态规划】JZOJ_6311 luogu_5307 Mobitel
海星原创 2019-08-20 21:46:52 · 195 阅读 · 0 评论 -
【数学 期望 动态规划 结论】JZOJ_6296 投票
题意有nnn个人,每个人投支持的概率为pip_ipi ,从中选出kkk个人,使平票概率最大。思路由题解得出结论设f[i][j]f[i][j]f[i][j]为前iii个人有jjj个投支持,可得:fi,j=fi−1,j−1∗pi+fi−1,j∗(1−pi)f_{i,j}=f_{i-1,j-1}*p_i+f_{i-1,j}*(1-p_i)fi,j=fi−1,j−1∗pi+fi−1,j...原创 2019-08-15 19:43:20 · 238 阅读 · 0 评论 -
【数据结构 线段树 动态规划 动态dp】JZOJ_6293 迷宫
题意给出一个矩阵,里面有些墙,有两种操作:1、改变矩阵的一个点的状态(有墙->无墙)(无墙->有墙)2、询问一个点到另一个点的最短路思路利用线段树维护fx,yf_{x,y}fx,y代表当前区间最左端的第xxx行到最右端的第yyy行。两个线段树合并时fx,y=fx,k+fk,y+1f_{x,y}=f_{x,k}+f_{k,y}+1fx,y=fx,k+fk,y+1,可看...原创 2019-08-15 21:02:02 · 256 阅读 · 0 评论 -
【动态规划】JZOJ_6313 Maja
又是dp原创 2019-08-21 17:09:22 · 211 阅读 · 0 评论 -
【数据结构 数学 线段树 矩阵乘法 动态dp】SP1716 GSS3 Can you answer these queries III
题意见之前思路考虑动态规划求最大子段和。设fif_ifi为以aia_iai结尾的最大子段和,gig_igi为aia_iai前的最大子段和,得出方程:fi=max(fi−1+ai,ai)、gi=max(gi−1,fi)f_i=max(f_{i-1}+a_i,a_i)、g_i=max(g_{i-1},f_i)fi=max(fi−1+ai,ai)、gi=max(gi−1,f...原创 2019-08-13 00:35:54 · 455 阅读 · 2 评论 -
【动态规划 状压dp】JZOJ_6316 djq的朋友圈
状压dp原创 2019-08-22 09:08:00 · 191 阅读 · 0 评论 -
【数据结构 动态规划 单调栈】JZOJ_6305 最小值
在线口胡原创 2019-08-17 20:41:01 · 254 阅读 · 0 评论 -
【动态规划 树】JZOJ_3738 理想城市
题意在一个方格图上有若干个小格,其中满足小格互相连通,且不是空格也互相连通。求小格两两之间的最短路的总和。思路暴力303030分很好打,但是后面枚举小格一定是O(n2)O(n^2)O(n2)的,所以我们考虑别的做法。根据图的性质,我们可以把横着连通小格缩成一个点,将相邻的小格的点连边。可以发现,一条连接(u,v)(u,v)(u,v)的边对答案的贡献为size[v]∗(n−size[v])...原创 2019-08-11 08:49:14 · 191 阅读 · 0 评论 -
【动态规划 记忆化搜索】JZOJ_6287 扭动的树
题意给出nnn个节点<key,val><key,val><key,val>,其中键值为keykeykey,权值为valvalval,用它们建一颗BSTBSTBST,且保证任意一条边的两个节点的gcdgcdgcd不为111。定义某个节点的sumsumsum为其子树中所有valvalval的和。最大化sumsumsum,不存在这...原创 2019-08-09 21:36:21 · 294 阅读 · 0 评论 -
【斜率优化】洛谷_3195 [HNOI2008]玩具装箱TOY
题意给出NNN个物体,每个物体有一个CiC_iCi,每次选择压缩第iii个物体到第jjj个物体的代价是x=j−i+∑k=ijCkx=j-i+\sum^{j}_{k=i}C_kx=j−i+∑k=ijCk,还要加上(x−l)2(x-l)^2(x−l)2,求出一种压缩方法求出最小的代价。思路入门博客代码#include<cstdio>int n, l;long long...原创 2019-04-25 15:56:28 · 244 阅读 · 0 评论 -
【动态规划】SSL_1322 清兵线
题意在一个数轴上有一些小兵,每个小兵在一个单位时间会减少一滴血量,清一个兵得到的金币为这个兵剩下的血量,求从原点如何清兵会得到尽量多的金币。思路因为清兵要么一直往一个方向走,要么清到一半退回来,所以我们可以设fi[i][j][k]为当前要清kkk个兵,已经清了i∼ji\sim ji∼j的兵,当前在第iii个兵上的最多金币,可以得出动态转移方程:fi[i][j]=max(f[i+1][j]+...原创 2019-05-11 16:29:47 · 180 阅读 · 0 评论 -
【动态规划】luogu_1412 经营与开发
题意按顺序经过nnn个星球,有两种种类的星球:(ppp为当前钻头能力值,初始能力为www)1.资源型:含矿物质量a[i],若选择开采,则得到a[i]∗pa[i]*pa[i]∗p的金钱,之后钻头损耗k%,即p=p∗(1−0.01k)k\%,即p=p*(1-0.01k)k%,即p=p∗(1−0.01k)2.维修型:维护费用b[i],若选择维修,则支付b[i]∗pb[i]*pb[i]∗p的金钱,...原创 2019-05-17 21:23:51 · 209 阅读 · 1 评论