----动态规划
文章平均质量分 58
扩展的灰
扩展的灰(Extended Ash)
展开
-
Jzoj5237 最长公共子序列
给你序列A和B,求出他们LCS的方案数,|A|,|B|dp套dp经典题目,我们考虑先求出LCS,令f[i][j]表示处理到序列A的第i位,B序列的第j位时的LCS长度那么转移很显然,现在考虑如何统计答案我们设g[i][j]为当处理到序列A的第i位,B序列的第j位时LCS的方案数显然我们要考虑f[i][j]的转移情况若f[i][j]=f[i-1][j-1]+1 那么g[i][j]原创 2017-11-17 20:58:39 · 280 阅读 · 0 评论 -
Jzoj2682 最长双回文串
顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同)。 输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串。PAM模(mu)板题当然也可以manacher+DP,跑的快#include#include#include#define原创 2017-12-07 22:01:39 · 269 阅读 · 0 评论 -
Jzoj3528 图书馆
圣玛格丽特大图书馆是一座由石材砌成的角柱型高塔,是欧洲屈指可数的巨大书库。图书馆整面墙壁都是巨大的书架,书架与书架之间就像巨大的迷宫一般,以细窄的木制楼梯连结。大图书馆的最高处是一个绿意盎然的植物园,维多利加正在那无聊地看着书。今天,一如往常地,久城要爬上这迷宫般的楼梯给维多利加送讲义。图书馆墙壁上有N个平台,编号为1到N,入口为1号,植物园为N号。有M个连接两个不同平台的楼梯,爬每个楼梯需要原创 2018-01-22 19:18:05 · 447 阅读 · 0 评论 -
Jzoj1968 设计铁路
A省有一条东西向的公路经常堵车,为解决这一问题,省政府对此展开了调查。调查后得知,这条公路两侧有很多村落,每个村落里都住着很多个信仰c教的教徒,每周日都会开着自家的车沿公路到B地去“膜拜”他们的教主,这便是堵车的原因。详细调查显示:这里总共有N个村落,并且它们都在B地的东边。编号为i的村落住有ti个信仰c教的教徒,距离B地的距离为ri(单位:公里)。 为解决这一问题,A省政府决原创 2018-01-30 20:06:36 · 213 阅读 · 0 评论 -
Jzoj3169 生产汽车
如前面提到,ABC的汽车工厂有N个工人,他们在一个传送带上生产汽车,工人从左到右排列,编号依次为1到N,采用流水线模式,每个人负责自己的一部分工作。生产一台汽车需要从1号工人开始,当1号完成他的工作后,2号就会开始工作,然后是3号,最后当N号工人完成他的工作后,整个汽车生产完毕。工人们一共需要生产M台汽车,而且必须按照从1到M的顺序去生产。对于工人i,他完成自己的工作需要Ti的时间,而对于原创 2018-01-07 21:55:56 · 421 阅读 · 0 评论 -
Jzoj3176 蜘蛛侠
话说世界上有很多超级英雄:蝙蝠侠,蜘蛛侠,超人,名字都写不出来的人等等。在他们之中有一个叫Kickass。今天他想模仿蜘蛛侠,所以他选择了一排高楼来跳。具体来说,他选择了一列N幢高楼,从左到右标号为1到N。一开始他在第K幢高楼。不幸的是,Kickass能力非常有限,只能跳到向左或向右相邻的高楼,而且他要跳到的楼的高度必须不能大于他现在处在的楼的高度。Kickass不想自己看起来很渣渣,所以原创 2018-01-07 22:06:42 · 445 阅读 · 0 评论 -
Jzoj5542 董先生的钦点
这道题在我做的前一天被wjw大佬压中了,当时随便脑洞了一个做法于是在比赛还剩3分钟的时候我把它写了一下就切了考虑一个集合S,f(S)=ΣSi 显然我们将所有的f排序之后有一个性质rank[f(S)]+rank[f(~S)]=2^N那么显然,中位数就是将全集划分为两个尽可能平均的集合的较大一部分我们考虑dp,f[i]=max(f[i-v[j]]+v[j]) ,答案即为f[S/2]原创 2018-01-24 17:27:49 · 630 阅读 · 1 评论 -
Bzoj1004 [HNOI2008]Cards
小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红色,Sb张蓝色,Sg张绝色.他又询问有多少种方案,Sun想了一下,又给出了正确答案. 最后小春发明了M种不同的洗牌法,这里他又问Sun有多少种不同的染色方案.两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(原创 2018-01-25 16:33:10 · 278 阅读 · 0 评论 -
Jzoj4210 我才不是萝莉控呢
小Y:“小R你是萝莉控吗。”小R:“...” 为了避免这个尴尬的话题,小R决定给小Y做一道题。有一个长度为n的正整数数组A,满足艾> =艾+ 1,现在构造一个数组B,令的Bi = ΣA[j] (j∈[i,n])。现在,有一个N * N的网格图,左下角坐标是(1,1),右上角坐标是(N,N)。有一个小SB正在坐标为(n,1)的位置,每一时刻,如果他现在在(x,y),他可以选择走到(x?-原创 2018-01-18 19:52:40 · 1659 阅读 · 0 评论 -
Vijos1984 随机树
题目传送门突然听说要去THUAC让我很虚于是进入赛季恢复期发现自己已经不如退役选手了。。。。No!好的开始讲题第一问:显然线性可加乱搞啊,f[i]表示n=i时候的答案那么每加入2个节点在减掉原来那个就好了,f[i]=(f[i-1]*(i-1)+(f[i-1]+1)*2-f[i-1]考虑第二问,这一问看了正解才发现自己已经退役了一直在考虑如何记录关于新加入那两个节点的信息原创 2017-12-23 11:22:14 · 372 阅读 · 1 评论 -
Jzoj3467 最长上升子序列
维护一个序列,使它可以进行下面两种操作:1.在末尾添加一个数字x2.将整个序列变成第x次操作后的样子在每次操作后,输出当前序列的最长上升子序列的长度序列初始时为空嗯,可持久化线段树的裸题额这可是noip提高组难度的题,我们发现所有操作可以变成一棵树(离线做法老套路了)让后每次最多修改数组上的一个值(考虑二分求LIS的过程)最后改回去就好了注意dfs又卡栈(jzo原创 2017-11-25 18:58:07 · 2932 阅读 · 0 评论 -
Jzoj4771 爬山
国家一级爬山运动员h10今天获得了一张有着密密麻麻标记的地图,在好奇心的驱使下,他又踏上了去爬山的路。对于爬山,h10有一个原则,那就是不走回头路,于是他把地图上的所有边都标记成了有向边。他决定从点S出发,每到达一个新的节点他就可以获得一定的成就值。同时h10又是一个很珍惜时间的运动员,他不希望这次爬山的成就值白白浪费,所以最后他一定要在一个存档点停下,保存自己的成就值。请你计算出在此次爬原创 2017-11-24 20:26:30 · 633 阅读 · 0 评论 -
Jzoj5452【NOIP2017提高A组冲刺11.5】轰炸
战狂也在玩《魔方王国》。他只会征兵而不会建城市,因此他决定对小奇的城市进行轰炸。小奇有n 座城市,城市之间建立了m 条有向的地下通道。战狂会发起若干轮轰炸,每轮可以轰炸任意多个城市。每座城市里都有战狂部署的间谍,在城市遭遇轰炸时,它们会通过地下通道撤离至其它城市。非常不幸的是,在地道里无法得知其它城市是否被轰炸,如果存在两个不同的城市i,j,它们在同一轮被轰炸,并且可以通过地道从城市i 到原创 2017-11-06 16:28:11 · 467 阅读 · 0 评论 -
Jzoj5455【NOIP2017提高A组冲刺11.6】拆网线
企鹅国的网吧们之间由网线互相连接,形成一棵树的结构。现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料。但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把这K只企鹅安排到不同的机房(两只企鹅在同一个机房会吵架),然后拆掉一些网线,但是需要保证每只企鹅至少还能通过留下来的网线和至少另一只企鹅联机游戏。所以他们想知道,最少需要保留多少根网线?今天考场上又zz了,只切了第二原创 2017-11-06 16:41:32 · 505 阅读 · 0 评论 -
Jzoj5230 队伍统计
现在有n个人要排成一列,编号为1->n 。但由于一些不明原因的关系,人与人之间可能存在一些矛盾关系,具体有m条矛盾关系(u,v),表示编号为u的人想要排在编号为v的人前面。要使得队伍和谐,最多不能违背k条矛盾关系(即不能有超过k条矛盾关系(u,v),满足最后v排在了u前面)。问有多少合法的排列。答案对10^9+7取模。对应100%的数据,n,k发现数据很小,可以用状压dp我们设f[原创 2017-11-15 21:20:06 · 318 阅读 · 0 评论 -
Jzoj5244 Daydreamin
温馨提示:本文附带bgm worldwideD最近有午睡的习惯~ 某日中午,他做了一个梦:梦见有一个怪人,她去一个岛上住N+1天(编号为0到N)。这是在大洋中的岛,每天要么是晴天,要么刮台风。 她到达岛的第0天是晴天(这样她才能上岸)。然后对于第i天,假如是晴天,那么有P(0≤P≤1)的几率会变天:接下来连续M天都刮台风,然后第i+M+1天必然会转晴。原创 2017-11-20 18:42:15 · 374 阅读 · 0 评论 -
Jzoj5235 好的排列
对于一个1->n的排列 ,定义A中的一个位置i是好的,当且仅当Ai-1>Ai 或者Ai+1>Ai。对于一个排列A,假如有不少于k个位置是好的,那么称A是一个好的排列。现在有q个询问,每个询问给定n,k,问有多少排列是好的。答案对10^9+7取模。显然是计数类dp,我们设f[i][j]表示对于一个1->i的排列,好的位置有j个的情况考虑转移,显然f[i][j]->f[i+1][k]相原创 2017-11-16 17:02:14 · 513 阅读 · 0 评论 -
51Nod1022 石子归并V2
题目传送门四边形不等式第一题,口胡一下我们原来的方程式:f[i][j]=sum[i][j]+max(f[i][k]+f[k+1][j]){i那么,如果我们将最优的那个k记录下来,记为g[i][j],那么必然会有g[i][j-1]当然这个东西成立是需要条件的,就是f[i][j']+f[i'][j]f[i][j]+f[i'][j'] (i博主太弱上面两个都不会证明(只会证明sum[原创 2017-12-02 16:37:42 · 244 阅读 · 0 评论 -
Jzoj4746 树塔狂想曲
相信大家都在长训班学过树塔问题,题目很简单求最大化一个三角形数塔从上往下走的路径和。走的规则是:(i,j)号点只能走向(i+1,j)或者(i+1,j+1)。如下图是一个数塔,映射到该数塔上行走的规则为:从左上角的点开始,向下走或向右下走直到最底层结束。 1 3 8 2 5 0 1 4 3 8 1 4 2 5 0路径原创 2017-11-23 20:45:17 · 290 阅读 · 2 评论 -
Jzoj4743 积木
由于n很小(显然可以用三进制(雾)但是太浪费了我们令f[i][j][s]表示现在已用的积木状态为S,最上面那个积木是第i个,其中这个积木的第j(0转移的时候枚举i'和j‘判断一下即可由于每个积木边长顺序没有影响所以可以先排序方便比较#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#include#include原创 2017-11-23 21:42:40 · 372 阅读 · 0 评论 -
Jzoj3177 安全监控
选举越来越近了,所以总统Amabo Kcarab准备在美国计划一次旅行,并在WDC和LA进行演讲。特务为了能够保护总统的安全,需要时刻监控所有总统会经过的城市(包括WDC和LA)。当然,为了使预算不会太大,总统不会用到AF1,而会用汽车作为交通工具。并且,特务计划在总统从WDC到LA和回到WDC的旅途中安排尽可能少的需要监控的城市数目。对于这个问题,我们假设美国有N(N写一个程序计算出原创 2018-01-10 17:06:15 · 342 阅读 · 0 评论 -
Jzoj2183 树
图论中的树为一个无环的无向图。给定一棵树,每个节点有一盏指示灯和一个按钮。如果节点的按扭被按了,那么该节点的灯会从熄灭变为点亮(当按之前是熄灭的),或者从点亮到熄灭(当按之前是点亮的)。并且该节点的直接邻居也发生同样的变化。 开始的时候,所有的指示灯都是熄灭的。请编程计算最少要按多少次按钮,才能让所有节点的指示灯变为点亮状态。高斯消元裸题好吧如果出到100W就不能这么做了(虽然说这题原创 2018-01-20 17:21:34 · 244 阅读 · 0 评论 -
51nod1803 森林直径
题目看这里 (为什么xhEditor不能支持字体了,不管了,那就用markdown吧) 一个非常有意思的题目,首先考虑离线做法,把所有的询问按照l排序,所有的边倒序插入整个树中 我们需要维护两个东西: 1.f[x][i]表示当整颗树有[x,f[x][i]]这一个区间内的所有边时,以x为根的子树存在一个深度为i的儿子,满足条件最小的f[x][i] 2.g[k]表示最小的r,使得[l,...原创 2018-07-25 17:59:01 · 293 阅读 · 0 评论 -
51Nod1306 高楼和棋子
题目看这里 一个非常好的逆向思维题(都是套路233) 如果直接做发现其实可以做,但是数据范围太大不能过了,具体做法参考这里 开始正文: 首先,我们设f[i,j]表示f[i,j]表示f[i,j]表示在有i个棋子的情况下,扔j次能保证测出的楼层最高是多少,显然如果n可以被测出,那么n-1也可以被测出 于是考虑一下最优策略是什么 在高度h扔一个棋子下去,如果碎了,那么说明高度&...原创 2018-07-29 11:29:52 · 274 阅读 · 0 评论 -
斜率DP十连测
最近学校里很多题目都没时间做,顺便来写一下博客 斜率DP十连: A[征途] 注意到,原题的式子,等价于m∑a2i−(∑ai)2m∑ai2−(∑ai)2m\sum a_i^2-(\sum a_i)^2后面部分是常数 那么我们就可以写出dp方程f[i,j]=min{f[i−1,k]+(sj−sk)2},k<jf[i,j]=min{f[i−1,k]+(sj−sk)2},k<...原创 2018-08-12 23:59:34 · 300 阅读 · 0 评论 -
CDQ分治&整体二分九连测
整体二分好难a CDQ分治&整体二分九连: A[适者] 先来一个不是cdq分治的题(虽然也可以用分治做) 首先先来考虑按照什么顺序来搞掉这些机甲 对于两个相邻的机甲i,j,先i后j的代价是Ai∗Di+(Di+Dj)∗AjAi∗Di+(Di+Dj)∗AjA_i*D_i+(D_i+D_j)*A_j 那么如果i应该比j先消灭就有 Ai∗Di+(Di+Dj)∗Aj<A...原创 2018-08-19 21:32:06 · 571 阅读 · 0 评论 -
状压DP十六连测
DP应该先学插头 状压DP十六连 A[寿司晚宴] 开始想到了反演,设f(d)f(d)f(d)表示两边选出来的公因数为d的方案数,设F(d)F(d)F(d)… 好的介绍一个套路,按照最大的质因子分类(没错这不是洲阁筛) 我们发现小于500−−−√500\sqrt{500}的质数只有8个,可以搞一个2162162^{16}的状态表示一种方案 让后,我们设T(x)T(x)T(x)表示x...原创 2018-08-28 09:33:27 · 408 阅读 · 0 评论 -
FWT模板
.稍微学了一下FWT发现挺好写这个东西和FFT其实区别比较大,所以比较适合理性理解比如对于or运算的FWT,我们考虑这样一个式子FWTor(A)[i]=∑j∣i=iA[j]FWT_{or}(A)[i]=\sum_{j|i=i}A[j]FWTor(A)[i]=j∣i=i∑A[j]以及我们要求的东西(A∣B)[k]=∑i∣j=kA[i]∗B[j](A|B)[k]=\sum_{i|j=k}...原创 2018-10-10 10:50:50 · 352 阅读 · 0 评论 -
各种杂题合集
.好久没有往blog搬运题解了,稍微总结一下1.基环树一个非常套路的题目类型,都是可以直接复制代码的那种基本操作就是,dfs找环,让后拉出来倍长,最后在上面做dp即可CodeForces 835F Roads in the Kingdom大概就是要找删掉一条边后使得树最小的直径先dp环旁边的数,找到子树的到根最长链,设为fff倍长后令Fi=Si+fi,Gi=fi−SiF_i=S...原创 2018-10-24 22:02:49 · 222 阅读 · 0 评论 -
PKUSC2018部分题解
.LOJ的std+数据+当时讲题的记忆硬是刚了五道题(D1t3咕咕咕)稍微写一下题解LOJ6432 「PKUSC2018」真实排名一道比较简单的题,不过需要注意很多细节考虑排名不变的两种情况1.自己分数xxx不变,那么所有分数在[[x2],x)[[\frac{x}{2}],x)[[2x],x)中的其他人的分数也不能变,否则必然有在自己后面的人到自己前面2.自己分数xxx翻倍,那么...原创 2018-12-29 11:04:04 · 687 阅读 · 0 评论 -
51Nod1353 树
题目看这里题意很简单,大概是有多少种删边方法使得每一块大小不小于k我们设一个树形dp,f[i][j]表示i的子树中,i所在联通块的大小为j的方案数有多少特别的,我们用f[i][0]表示∑f[i][j] (j>=k)那么可以写出以下转移:f[x][i+j]+=f[x][i]*f[v][j] (j>0)f[x][i]=f[x][i]*f[v][0]答案就是f[root][0]#includ...原创 2018-04-27 21:08:43 · 296 阅读 · 0 评论 -
51Nod1158 全是1的最大子矩阵
题目看这里想到了NOIP普及组当年那道题做法非常显然,O(n^2)枚举矩形的上下边界,让后用一个dp+前缀和就搞定了f[i]表示以第j列作为结尾的最大子矩形的宽,那么如果第i列在[l,r]的范围都是1,那么f[i]=f[i+1],否则f[i]=0答案就是max{(r-l+1)*f[i]}#pragma GCC opitmize("O3")#pragma G++ opitm原创 2018-04-27 17:19:44 · 280 阅读 · 0 评论 -
51Nod1084 矩阵取数问题 V2
题目看这里一个经典的dp题,典型的错误思想就是做两遍我们考虑直接做,f[i][j][x][y]表示第一次取道i,j这个位置,第二次到了x,y这个位置考虑这个i,j和x,y分别是从哪里转移过来,就可以得到方程f[i][j][x][y]=max(f[i-1][j][x-1][y],f[i][j-1][x-1][y],f[i-1][j][x][y-1],f[i][j-1][x][y-1]原创 2018-04-27 17:03:02 · 311 阅读 · 0 评论 -
Jzoj2309 辽哥游戏
张辽是一个长发飘飘的非常聪明的男孩,人人都称他为“辽哥”。辽哥喜欢玩一个有趣的电脑游戏。这个游戏开始的时候有n个碉堡,每个碉堡拥有一个防御值a和一个附加值b。玩家拥有一个初始的攻击力S。如果玩家破坏了一个碉堡,则他能得到1分。每一次,辽哥会选择一个碉堡进行攻击。所有未被破坏的碉堡会联合起来防御,因此为了破坏那个碉堡,辽哥的攻击力必须大于或者等于所有未被破坏的碉堡的防御值之和,否则辽哥就会输掉游戏。原创 2018-01-20 21:09:00 · 386 阅读 · 0 评论 -
51Nod1679 连通率
题目看这里一个简单的计数问题我们先考虑O(n^2)的做法对每个点dfs一次,求出d[i]表示i的深度,那么对答案贡献就是Σ2^(n-d[i])那么我们考虑用数据结构动态维护这个d[i],显然可以用线段树来维护dfs序做到复杂度O(n lg n) 效率很高rank8看了下solution突然才发现别人都不是这么做的!不管了反正跑得过而且跑的快。。就是代原创 2018-02-22 21:51:15 · 247 阅读 · 0 评论 -
Jzoj5600 Arg
给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS.dp套dp好题!我们先要考虑怎么搞一个状态出来考虑做lis的两种方法:1.设f[i]表示做到i的最长子序列长度2.设f[i]表示长度为i的上升子序列最后那个数最小是多少第一种方式不好设状态,我们考虑第二种显然,如果知道f里有哪些数字,就可以还原f那么我们设一个状态原创 2018-04-17 22:06:19 · 200 阅读 · 0 评论 -
Jzoj5661 药香沁鼻
有依赖关系的树形背包,算是又积累了一种做法一个经典的做法就是设f[x][j]表示在x子树内,容量为j的最大获利那么转移可以写成 f[x][j]=max{f[x][j],f[x][j-k]+f[v][k]} v是x的子树我们在dp时记录背包的剩余空间,就可以得到80分一个更好的优化就是用dfs序,复杂度直接下降为O(nm)当然最快的做法还是直接在树上做,我们还是设f[x][j]表原创 2018-04-20 20:56:36 · 283 阅读 · 0 评论 -
Jzoj5644 凫趋雀跃
经典套路容斥题直接dp做是O(TxTyRk)的可以60分满分做法又要用到经典的容斥法我们设f[i][x][y]表示走i步,走到x,y的方案(不考虑不合法向量)设g[i][x]表示走了i步不合法的向量,走到了(x,x)的方案数二项式反演得Answer=∑(-1)^i*C(R,i)*g[i][x]*f[R-i][Tx-x][Ty-x] 考虑f如何计算,因为x,y两维是独立的原创 2018-04-20 21:06:31 · 284 阅读 · 1 评论 -
Jzoj5674 香槟
有一棵 n 个节点的树,初始时所有节点都为空。Alan 和 Bob 在树上玩游戏,双方轮流进行,Alan先手。每轮中,Alan 可以选择一个空节点 x,在 x 上放一个波澜哥;Bob 每轮可以选择一个空节点 y,将 y 节点以及所有与 y 相邻的节点上都放置一个面筋哥。可能存在节点既有波澜哥,又有面筋哥。当所有节点非空时,游戏结束。由于面筋哥比较得劲,Alan 和 Bob 认为如果一个节点上有原创 2018-04-20 21:43:27 · 370 阅读 · 0 评论 -
51nod1122 机器人走方格V4
题目看这里看一看知道可以dp设f[i][s1][s2][s3][s4]表示走了i步,每个机器人分别在哪个格子里用矩阵优化但是发现状态数过于巨大,会TLE考虑设f[i][j][k]表示走了i步,从j格子走到k格子的方案数那么显然f[i]=T^i 其中T是全1矩阵减掉单位矩阵那么可以快速幂求出f接下来枚举4的全排列g,表示第i个机器人走到g[i]答案就是∑∏f[i]原创 2018-04-27 11:49:53 · 254 阅读 · 0 评论