线性DP
文章平均质量分 68
# 线性DP
Jozky86
这个作者很懒,什么都没留下…
展开
-
CF1271D Portals
CF1271D Portals题意:题意选自洛谷题解:首先要先发现性质:对于任何一个城堡u,如果要往u驻军,则在攻占编号最大的能向u行军的城堡后再驻军,答案一定不会变劣。你想想,如果后面有编号更大的点可以前往u,那我们就没有必要再之前派军驻扎,如果派军反而还会少一个士兵。因此对于一个城堡,我们只需要保存编号最大的城堡到他的行军路线。一开始每个城堡到其编号最大的城堡是其本身现在考虑dp转移,感觉本题情况非常多又复杂。我们可以规整规整,因为攻打顺序是1到n,顺序已经给好了,那么对于第i个点,我们可以原创 2021-11-01 20:07:38 · 328 阅读 · 0 评论 -
CF662C Binary Table
CF662C Binary Table题意:有一个 n 行 m 列的表格,每个元素都是 0/1 ,每次操作可以选择一行或一列,把 0/1 翻转,即把 0 换为 1 ,把 1 换为 0 。请问经过若干次操作后,表格中最少有多少个 1n<=20,m<=1e5题解:参考洛谷题解第一篇,讲的太详细了因为行很小(n<=20),列很大(m<=1e5),因为我们可以考虑枚举反转了哪些行。设X表示翻转了哪些行(X是一个整数,其二进制表示翻转的状态)对于任意一列,设第i列的状态为SiS原创 2021-10-27 21:51:24 · 169 阅读 · 0 评论 -
Tree Cutting HDU - 5909
Tree Cutting HDU - 5909题意:一个无根树,n个点,n-1条边,每个节点有一个权值,一棵树的权值就是其节点(包含本身及其子节点)的权值的异或和;求价值为[0,m)的树有多少颗?(所谓的树其实就是原连通图的任意子图)n<=1000m<=2102^{10}210题解:不难想到树形dp设dp[u][i]表示以u节点为根的价值为i的树的数量能得到转移方程:dp[u][j⨁k]=dp[u][j⨁k]+dp[u][j]∗d[v][k]dp[u][j\bigoplus k原创 2021-10-27 20:43:01 · 151 阅读 · 0 评论 -
P1437 [HNOI2004]敲砖块
P1437 [HNOI2004]敲砖块题意:在一个凹槽中放置了 n 层砖块、最上面的一层有 n 块砖,从上到下每层依次减少一块砖。每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示:14 15 4 3 23 33 33 76 2 2 13 11 22 23 31如果你想敲掉第 i 层的第 j 块砖的话,若 i=1,你可以直接敲掉它;若 i>1,则你必须先敲掉第 i-1 层的第 j 和第 j+1 块砖。你现在可以敲掉最多 m 块砖,求得原创 2021-10-14 13:20:07 · 158 阅读 · 0 评论 -
CF1497D Genius
CF1497D Genius题意:n个问题从i到n编号,第i个问题给出的ci=2i,tagi,sic_i=2^i,tag_i,s_ici=2i,tagi,si解决问题i后解决问题j条件是:IQ<|ci−cjc_i-c_jci−cj|,同时获得|si−sjs_i-s_jsi−sj|分问题解决得次数和顺序不受限制一开始IQ=0,求最高可获得得分数内存限制31.25MB,大致可以开1e7的数组题解:很明显动态规划,按照一般思路设dp[i][j]:上一次是第i个问题,本次是第j个原创 2021-10-12 22:22:02 · 136 阅读 · 0 评论 -
CF1497E2 Square-free division (hard version)
CF1497E2 Square-free division (hard version)题意:数组 a 由 n 个正整数构成。你需要将它们分割成最小数量的连续子段,使得每一个子段中的任意两个数(不同位置)的乘积不为完全平方数。除此之外,你被允许在分割之前进行最多 k 次修改操作。在一次修改操作中,你可以选择数组中的某个位置的数,将该位置的数变为任意正整数。请问连续子段的最小数量是多少(在最多 k 次操作后)?题解:本题多了修改操作,一开始部分和E1情况一样,还是先对数组a[]a[]a[]进行操原创 2021-10-12 20:18:05 · 162 阅读 · 0 评论 -
CF1149B Three Religions
CF1149B Three Religions题意:给定长度为 n 的母串和三个子串s1,s2,s3s_1,s_2,s_3s1,s2,s3 。初始时子串均为空。有 q 次询问。你需要支持两种操作:向某个子串末尾添加一个字母,或者删去某个子串末尾的字母。在每次操作后,你需要回答,是否能从母串中分离出三个不相交的子序列(不改变字符原有顺序),满足这三个子序列恰好是s1,s2,s3s_1,s_2,s_3s1,s2,s3在任意时刻,s1,s2,s3s_1,s_2,s_3s1,s2,s3的长度原创 2021-10-06 11:43:52 · 114 阅读 · 0 评论 -
CF1253E Antenna Coverage
CF1253E Antenna Coverage题意:现在有n个点,每个点的坐标为xi,以及一个范围值si,可以覆盖左右范围[xi-si,xi+si]每次操作,可以花费代价1让第i个天线的si增加1,每个天线都可以进行多次操作。现在请问你最少需要花费多少代码,使得[1,m]内每个位置都被至少一个天线覆盖题解:参考题解很奇妙的思路我们设f[i]表示[1,i]被全部覆盖的最小花费,答案为fmf_{m}fm首先引入一个新的点,坐标为0,这样f的初始值就是f[i]=i这个点很重要,其保证了fi+原创 2021-09-17 16:10:26 · 113 阅读 · 0 评论 -
P1174 打砖块
P1174 打砖块题意:题解:参考题解:I_AM_HelloWorddanxmz2006这两个博客结合看,大致就能理解我们只在N处转移,面对Y类的块无需决策,因为Y类的块可以一直打不同的打砖块的顺序,决定了我们最后的分数情况,因此有个结论:我们最后一个打的砖块一定是N类砖块,除非所有的砖块都已经打完了我们从这点出发开始转移:对于计算[1,j]列的最优解时:第j列根本不打(此时直接继承[1,j-1]的状态)最后一发子弹在第j列上最后一发子弹在[1,j-1]列最后一发子弹还未出原创 2021-09-04 23:24:19 · 174 阅读 · 0 评论 -
cf1562E. Rescue Niwen!
cf1562E. Rescue Niwen!题意:我们定义一个字符串s1s2s3…sn的展开为:s1,s1s2,s1s2…sn,s2,s2s3,s2s3…sn,…,sn找到字符串s“扩展”的最大递增子序列的大小(根据字典序大小比较)题解:第一感觉就是求最长上升子序列的变形按照字典序大小比较规则,s1<s1s2<s1s2…sn所以相当于对于每个字符,都会有一个已经默认递增的长度为n-i+1的后缀子序列比如:abcde对于第一个字符a,默认递增的有a<ab<abc&l原创 2021-09-03 20:03:57 · 119 阅读 · 0 评论 -
P2467 [SDOI2010]地精部落
P2467 [SDOI2010]地精部落题意:有n个山脉高度分别是1到n,现在让你按照山峰山谷的顺序依次摆放(第一个可以是山峰也可以是山谷),问有多少方案(答案mod p)题解:dp,但是自己推不出来这个博客讲的非常详细,方案也非常多我就先将第一个方案:我们先去看这个波动序列有什么性质?在一个波动序列中,如果i-1与i不相邻,交换i-1与i即可得到一个新的波动序列把长度为n的一个波动序列中的数字ai变成(n+1)-ai,会得到一个新的波动序列,且新波动序列的山峰和山谷与原序列相反我们原创 2021-08-06 11:47:29 · 122 阅读 · 0 评论 -
Double Strings
Double Strings题意:给你s和t两个字符串,在其中选出两个等长的子序列(可以不连续)a,b,满足a的字典序严格小于b的字典序,问方案数,答案mod(1e9+7)题解:好的方案的构成是一段相同的前缀+一个不同的字符(a比b小)+长度相同的任意后缀,按照这样构造一定是合法且包含所有情况我们用dp[i][j]表示只考虑A的前i个字符和B的前j个字符时的相同的子序列的个数(有点类似于最长公共子序列,不过我们这里记录的是方案数)转移方程可得:dp[i][j]=dp[i-1][j]+dp[i][原创 2021-08-02 11:04:02 · 278 阅读 · 0 评论 -
Acwing 277. 饼干
Acwing 277. 饼干题意:圣诞老人共有 M 个饼干,准备全部分给 N 个孩子。每个孩子有一个贪婪度,第 i 个孩子的贪婪度为 g[i]。如果有 a[i] 个孩子拿到的饼干数比第 i 个孩子多,那么第 i 个孩子会产生 g[i]×a[i] 的怨气。给定 N、M 和序列 g,圣诞老人请你帮他安排一种分配方式,使得每个孩子至少分到一块饼干,并且所有孩子的怨气总和最小。1≤N≤30,N≤M≤5000,1≤gi≤10710^7107题解:一个孩子的怨气大小与其他孩子获得的饼干数有关,通过贪原创 2021-07-30 17:16:04 · 300 阅读 · 0 评论 -
Acwing 276. I-区域
Acwing 276. I-区域题意:在 N×M 的矩阵中,每个格子有一个权值,要求寻找一个包含 K 个格子的凸连通块(连通块中间没有空缺,并且轮廓是凸的),使这个连通块中的格子的权值和最大。注意:凸连通块是指:连续的若干行,每行的左端点列号先递减、后递增,右端点列号先递增、后递减。求出这个最大的权值和,并给出连通块的具体方案,输出任意一种方案即可。1≤N,M≤15,0≤K≤N×M题解:很简单但是又很麻烦我们考虑每一行都需要根据上一行的情况来,因为我们要考虑这个凸连通块的问题dp[i][原创 2021-07-30 16:34:02 · 166 阅读 · 0 评论 -
AcWing 274. 移动服务
题意:2<=L<=2001<=N<=1000题解:一共就三个员工,我们可以在状态中记录三个员工的位置;有:dp[i][x][y][z]:第i个工作完成后,三个员工的坐标分别是x,y,z,的最小花费转移方程为:dp[i+1][p[i]][y][z]=min(dp[i][x][y][z]+g[x][p[i+1]])dp[i+1][x][p[i]][z]=min(dp[i][x][y][z]+g[y][p[i+1]])dp[i+1][x][y][p[i]]=min(dp原创 2021-07-30 14:57:30 · 145 阅读 · 0 评论 -
Acwing 273. 分级
Acwing 273. 分级题意:给定一个长度为N的序列A,现在构造一个长度为N的序列B,满足,B是非严格单增。最小化S=∑i=1N∣Ai−Bi∣\sum_{i=1}^{N}|A_i-B_i|∑i=1N∣Ai−Bi∣题解:引理:一定存在一组最优解,使得每个Bi都是原序列中的某个值这个引理是题目的关键证明:证明了来自y总A’[]是已经排序的数组a剩下就简单:dp[i][j]:表示前i个数已经分配好了b的第i个数我们赋值为A′[j]A'[j]A′[j]的最小S值dp[i][j]原创 2021-07-30 14:23:43 · 170 阅读 · 0 评论 -
Acwing 271. 杨老师的照相排列
Acwing 271. 杨老师的照相排列题意:有n个数分别是从1到n,现在排成k排,每排分别有Ci个数,要求每排每列的都是从小到大,问有多少种方案题解:因为每行每列都是单调的,因此我们可以从小到大一次考虑1 ~ n的位置。在任意时刻,已经安排好的位置的数在每一行都是递增关系的(因为我们是从小到大的安排),每个数都插在队尾。我们用一个5元组来表示每行的人数,(a1,a2,a3,a4,a5),ai表示第i行已经安排好的人数,当此时考虑下一步(即再安排一个新人时),我们考虑所有满足如下条件的行号i:a原创 2021-07-30 13:41:39 · 166 阅读 · 0 评论 -
Help Jimmy POJ - 1661
Help Jimmy POJ - 1661题意:场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MAX米,不然就会摔死,游戏也会结束。设计一个程序,计算Jimmy到底地面时可能的最早时间。题解:设dp[i][0]:表示到第i个原创 2021-07-15 11:59:36 · 69 阅读 · 0 评论 -
Almost Sorted Array HDU - 5532
Almost Sorted Array HDU - 5532题意:如果一个数组的元素“按非递减或非递增顺序排列”,那么称这个数组有序。现在,LYD给了你一个数组a,他让你从中选择并移除仅仅1个元素,请问剩下的元素构成的数组有可能是有序的吗?题解:其实就是让你求一个数组的最长上升或者下降下序列,这个序列是否大于等于n-1,这样多余的数的数量才会小于等于1,直接用nlogn的方法求LIS或者直接模拟写法,我们同时判断一个数列的上升和下降情况,上升时,下降的情况不能出现多于一次,下降情况 时,上升的情况原创 2021-07-14 15:18:18 · 117 阅读 · 0 评论 -
Tickets HDU - 1260
Tickets HDU - 1260题意:著名的宫崎骏动画片《千与千寻》在中传1500报重映,中传学子有幸成为全国第一批观众。动画学院学生会负责给大家发票,所有的中传同学只要把中传首映《千与千寻》的推送信息发到朋友圈并集够10个赞,就可以免费领取一张电影票。带着对童年的回忆,大家早早的就排队等待领票。为了让大家能够早点领取到心仪的门票,动画学院学生会想知道他们什么时候可以最快把票发完?最好的方法就是分好几处同时发票,并且在每处都尽量减少票的领取时间,让相邻的人一起领票。但是因为每处都只有两位同学在发票原创 2021-06-06 21:19:48 · 134 阅读 · 0 评论 -
Super Jumping! Jumping! Jumping! HDU - 1087
Super Jumping! Jumping! Jumping! HDU - 1087题意:给定一条长度为n的序列,其中一定存在一条元素和最大的严格上升子序列,求这条序列的元素和。题解:最长上升序列模板题代码:#include<bits/stdc++.h>#define debug(a,b) printf("%s = %d\n",a,b);typedef long long ll;using namespace std;inline int read(){ int s原创 2021-06-06 21:20:09 · 73 阅读 · 0 评论 -
[kuangbin]专题12 基础DP
HDU 1024 Max Sum Plus PlusHDU 1029 Ignatius and the Princess IVHDU 1069 Monkey and BananaHDU 1074 Doing HomeworkHDU 1087 Super Jumping! Jumping! Jumping!HDU 1114 Piggy-BankHDU 1176 免费馅饼HDU 1260 TicketsHDU 1257 最少拦截系统HDU 1160 FatMouse’s SpeedPOJ 1原创 2021-06-04 10:31:33 · 129 阅读 · 0 评论