动态规划
文章平均质量分 53
Lemon
1E6
这个作者很懒,什么都没留下…
展开
-
[LibreOJ - 2150] 最大子矩阵 (dp)
[LibreOJ - 2150] 最大子矩阵题目链接大致题意:在n∗mn*mn∗m的矩阵中,选出kkk个子矩阵,使得这kkk个子矩阵分值之和最大(选出的kkk个子矩阵不能相互重叠)解题思路:mmm的取值只有1或者2,分情况讨论当mmm等于1时预处理出第一列的前缀和,用sum1sum1sum1表示状态表示:f[i][j]表示到第i行取了j个矩阵的最大值f[i][j]表示到第i行取了j个矩阵的最大值f[i][j]表示到第i行取了j个矩阵的最大值转移方程:不选第i行的数字:f[i][原创 2021-11-30 16:50:32 · 382 阅读 · 0 评论 -
[LibreOJ - 507] 接竹竿 (前缀和优化dp)
[LibreOJ - 507] 接竹竿题目链接大致题意:一共有n张牌,每张牌上有一个花色c和一个点数v,花色不超过k 种。将这些牌依次放入一列牌的末端。若放入之前这列牌中已有与这张牌花色相同的牌,你可以选择将这张牌和任意一张花色相同的牌之间的所有牌全部取出队列(包括这两张牌本身),并得到与取出的所有牌点数和相同的分数。现在已知 这n张牌放入队列的顺序,求最多能得多少分解题思路:状态表示:f[i]f[i]f[i]表示选择第i张牌,得到的最大分转移方程:f[i]=max(f[i−1],f[j−原创 2021-11-29 18:34:24 · 615 阅读 · 0 评论 -
[vjudge UVA - 437] The Tower of Babylon (DAG上的DP)
[vjudge UVA - 437] The Tower of Babylon题目链接大致题意:有 nnn 种砖块,已知三条边长,每种都有无穷多个。要求选一些立方体摞成一根尽量高的柱子(每个 砖块可以自行选择一条边作为高),使得每个砖块的底面长宽分别严格小于它下方砖块的底面长宽,求塔的最大高度。解题思路:建立DAG由于每个砖块的底面长宽分别严格小于它下方砖块的底面长宽,因此不难将这样一种关系作为建图的依据,而本题也就转化为最长路问题也就是说如果砖块$ j $能放在砖块 iii 上原创 2021-11-17 22:50:08 · 158 阅读 · 0 评论 -
D. Say No to Palindromes (dp+思维)
D. Say No to Palindromes题目链接大致题意:给出一个字符串以及字符串的长度n,有m次询问,每次询问给出l,r,求区间l,r不存在长度大于2的回文串最少需要进行几次修改(只包含abc三种字符,修改也只能包含abc三种字符)解题思路:对于只有abc三个字符构成的字符串,使得其不存在长度大于2的回文串,必然是存在循环节的,即abcabcabc这样那么对于三种字符,循环节的种类有六种,我们需要处理出字符串对于每个循环节需要做出的修改次数f[i][j]表示对于第i个循环节,到第j原创 2021-08-01 10:30:01 · 282 阅读 · 0 评论 -
B. Marvolo Gaunt’s Ring (递推)
B. Marvolo Gaunt’s Ring题目链接大致题意:给你三个数 p,q,r,然后给你给你一个有序的序列,让你在序列中跳出三个数i,j,k(i <=j<=k)使得 p*a[i]+q*a[j]+r*a[k] 最大,输出最大值解题思路:网上全是前缀后缀的思想,我的第一思路是递推,没想到AC了状态表示:f[pos][0]表示序列枚举到了第pos位,选择了第一个数a[i]后的最大值 p*a[i]f[pos][1]表示序列枚举到了第pos位,选择了第二个数a[j]后的最大值(当原创 2021-07-22 14:20:25 · 207 阅读 · 0 评论 -
C. Gas Pipeline(递推 dp)
C. Gas Pipeline题目链接大致题意:给出长度为n的01串,[0,n]的区间,建单位长度的管道代价a,建单位高度的柱子代价b,字符是0的区间最低高度是1,字符是1的区间最低高度是2,求建造管道和柱子花费的最小值解题思路:分析:有四种建造情况,低管道代价是a+b,上升管道代价2*a+2*b,高管道代价a+2*b,下降管道代价2*a+b(代价的计算是按照柱子前的管子+柱子,举例来说是[0,1]区间字符是0,代价是1位置的柱子加上[0,1]区间的管子)状态表示:f[i][0]表示位置i原创 2021-07-20 20:39:00 · 214 阅读 · 0 评论 -
C. Ayoub and Lost Array(递推计数)
C. Ayoub and Lost Array题目链接大致题意:有一个数组,元素个数n,元素的最小值l,元素的最大值r,另外数组元素和可整除3求满足条件的数组个数(mod1e9+7)(1,2)和(2,1)属于两个不同的数组解题思路:状态表示:f[i][0]表示到第i个数,前缀和对3取模为0的数组个数f[i][1]表示到第i个数,前缀和对3取模为1的数组个数f[i][2]表示到第i个数,前缀和对3取模为2的数组个数分析:求解时与第i位数字是几没有关系,只与取模结果为0,1,2的个数有关原创 2021-07-19 11:09:37 · 78 阅读 · 0 评论 -
D. Remove One Element (dp)
D. Remove One Element题目链接大致题意:给出n个数,最多删除其中一个数,求严格上升连续序列的最大长度解题思路:状态表示:f[i][0]表示从1到i的严格上升连续序列的最大长度f[i][0]表示从n到i的严格上升连续序列的最大长度分析:对于第i个数,只要满足a[i-1]<a[i+1],可以选择删除第i个数,此时最长长度为f[i-1][0]+f[i+1][1],同时更新答案AC代码:#include <bits/stdc++.h>#define r原创 2021-07-18 22:22:35 · 200 阅读 · 0 评论 -
E. Tetrahedron(递推)
E. Tetrahedron题目链接大致题意:一个正四面体,一只蚂蚁每一时刻只能停留在顶点处,一秒只能移动1并且不能停留求从D出发经过n秒后回到D的路径数(mod1e9+7)解题思路:状态表示:f[i] 表示第i秒的方案数分析:对于第i-1秒,有两种选择,即除当前点和起点外的另外两个点,最后一步回到起点对于第i-2秒,有三种选择,即除当前点的另外三个点转移方程:f[i]=(2*f[i-1]+3*f[i-2])%mod答案为f[n]AC代码:#include <bits/st原创 2021-07-16 22:02:12 · 246 阅读 · 1 评论 -
C. Woodcutters (贪心||dp)
C. Woodcutters题目链接大致题意:一条路上有树,树有高度h,我们可以将树向左或向右砍倒只要它倒下去不会压到其他树(不论这些树是站着还是倒下了)求最多可以砍倒多少树解题思路:贪心第1个数左倒,第n个树右倒,剩下的树优先左倒即可dp状态表示:f[n][3]表示三种状态下对应的最大值,f[i][0]表示不砍,f[i][1]表示向左倒,f[i][2]表示向右倒分析:优先左倒,按照情况转移即可AC代码:#include <bits/stdc++.h>#define原创 2021-07-16 21:32:41 · 396 阅读 · 0 评论 -
Bouncing Ball (dp)
Bouncing Ball题目链接大致题意:给出长度为 n 的 0 1 字符串, 0 表示这个位置没有柱子,1 表示这个位置有柱子再给你一个p, k ,表示第一步走 p 个单位,以后每一步都走 k 个单位,落脚点必须是有柱子的地方你可以花费 x 的代价给一个没有柱子的地方搭建柱子,或者花费 y 的代价将这个序列的首点删除(删除首点后,后面的下标整体 - 1),问走到终点的最小代价是多少解题思路:状态表示:f[i] 表示从i开始移动,移动到终点所需要的最小代价转移时,从后往前转移考虑到可以原创 2021-07-09 22:11:44 · 106 阅读 · 0 评论 -
The Number of Products (dp)
The Number of Products题目链接大致题意:给出一个序列,非零组成,求有多少个连续的子区间乘积小于零,大于零解题思路:对于第i个数如果a[i]>0,它对正数区间的贡献是前面子区间乘积>0的个数如果a[i]>0,它对负数区间的贡献是前面子区间乘积>0的个数+1如果a[i]<0,它对正数区间的贡献是前面子区间乘积<0的个数如果a[i]<0,它对负数区间的贡献是前面子区间乘积>0的个数+1状态表示:f[i][0]表示以i结原创 2021-07-09 11:05:38 · 370 阅读 · 0 评论 -
牛牛与数组(dp)
牛牛与数组题目链接大致题意:1.长度为n2.每一个数都在1到k之间3.对于任意连续的两个数A,B,A<=B 与(A % B != 0) 两个条件至少成立一个请问一共有多少满足条件的数组,对1e9+7取模解题思路:状态表示:f[i][j] 表示长度是i,第i位是j的方案数转移方程:f[i][j]=f[i-1][k] (1 <= k <= j || k % j != 0)分析:二维状态,求解要用三重循环,复杂度是n*m2,会超时,考虑优化正常的代码就是for (in原创 2021-07-07 10:37:03 · 129 阅读 · 0 评论 -
最优贸易(spfa和tarjan+拓扑排序+dp)
最优贸易题目链接大致题意:n个点m条边,每个点有一个权值代表在这个点买或者卖水晶球的价格有一个人从1走到n问你能够赚的最多的差价是多少(只能买卖一次)解题思路:这道题有很多写法,这里提供两种:spfa和tarjan+拓扑排序+dp第一种方法:跑两遍spfa以i点进行讨论,我们需要知道从1到i点买水晶球的最小值以及从i到n卖水晶球的最大值,两者相减极为答案所以我们要跑两遍spfa,第一遍正向跑,用dis表示从1到i的最小值,第二遍反向跑,用d表示从n到i的最大值,答案为d[i]-dis[i原创 2021-07-03 22:57:09 · 290 阅读 · 1 评论 -
换教室 (floyd+dp)
换教室题目链接大致题意:题目很长,但是好理解,注意分清每个变量的含义,这里就不再赘述解题思路:最短路+dp预处理出每两间教室间的最短距离然后剩下的就是dp了状态表示:f[i][j][2] 表示前i个时间点,共申请了j次,第i个时间点是否进行了申请(0否1是)分析:分两大类因为是求期望,所以情况都是先相加一.当前教室没有申请,即f[i][j][0],它只能由前一教室的状态转移得来--------1.如果前一教室有申请:f[i-1][j][1]-------------后成功: k[原创 2021-07-03 10:47:00 · 129 阅读 · 0 评论 -
产品加工 (dp)
产品加工题目链接大致题意:有两台机器,n件产品,每件产品分别给出在A机器和B机器加工的时间,以及同时在两台机器加工分别需要的时间.如果值为0,表示不能在该机器上加工.求加工所有产品所需的最短时间解题思路:状态表示:f[i][j]表示前i件产品,第一个机器用j时间,第二个机器用f[i][j]时间优化掉第一维,不然转移会超时在第一台机器上加工 f[j] = min(f[j], f[j - a])在第二台机器上加工 f[j] += b两台机器同时加工 f[j] = min(f[j],原创 2021-06-15 23:21:05 · 424 阅读 · 0 评论 -
粉刷匠 (dp)
粉刷匠题目链接大致题意:n个木板,每个木板m个格子,目标的格子只有两种颜色,'0’表示粉色,'1’表示蓝色.每次只能粉刷一个木板上连续的格子,涂上同一种颜色(每个格子只能被粉刷一次)求T次粉刷后,粉刷正确颜色的最大格子数(一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷)说明所有格子都会被粉刷解题思路: 状态表示: f[i][j] 表示前i个木板,粉刷j次的正确粉刷的最大格子数 g[i][j][k]表示第i个木板,粉刷j次,涂了前k个格子的正确粉刷的最大格子数原创 2021-06-14 16:04:38 · 730 阅读 · 0 评论 -
Communication System POJ - 1018 (DP)
Communication System题目链接大致题意:需要n台设备,每台设备有m家厂家提供,每家厂家提供的设备参数和价格不同,求f/p的最大值f为这n件设备的参数的最小值,f为这n件设备的总价解题思路:状态方程:f[i][j]表示第i台设备参数最小是j的最低价格 ,初始化INF状态转移:如果j<=a,(a指的是参数),f[i][j]=min(f[i][j],f[i-1][j]+b) (b指的是价格) 反之,f[i][a]=min(f[i][a],f[i-1][j]+原创 2021-05-16 19:13:33 · 147 阅读 · 0 评论 -
Codeforces Round #701 (Div. 2) E. Move and Swap(dp)
Move and Swap题目链接大致题意:一棵树,所有边权都是1,1为根节点,有红蓝两个物品,初始在根节点,有三个操作步骤1.红物走到一个儿子节点2.蓝物走到一个节点j ,满足dis(1,i)+1=dis(1,j),i 为蓝物当前节点3.可以交换红蓝两个物品的位置每轮操作完的价值为abs(a[i]-a[j]),i , j 为两者位置,当两个物品都在叶子的时候不再继续操作。求能够得到的最大价值和解题思路:把节点按照离根节点的距离进行分层,然后根据层进行dp状态表示:f[i]表示i层以原创 2021-04-22 18:43:58 · 112 阅读 · 0 评论 -
Constanze‘s Machine(dp)
题目链接: Constanze’s Machine大致题意:给你一个字符串,其中两个u 可以变成w,两个n可以变成m,可以不变问有多少种可能的字符串解题思路:如果出现m或者w直接输出0n 1nn 2nnn 3nnnn 5nnnnn 8发现是斐波那契数列f[i]=f[i-1]+f[i-2]f[i-1]表示直接把i位上的n 当成独立的不考虑合并f[i-2]表示直接把i-1位上的n和i位上的n和并AC代码:#include <bits/stdc+原创 2021-01-21 11:57:10 · 279 阅读 · 0 评论 -
Basketball Exercise(dp)
题目链接: Basketball Exercise大致题意:给出两组序列,从1到n,可以选任意数量的元素,要求要按顺序选切两个连续元素不能来自同一组,使得选的元素和最大解题思路:f[i][j]表示选到第i个位置,应该选第j组的最大值转移方程:f[i][0] = max(a[i] + f[i - 1][1], f[i - 1][0]);f[i][1] = max(b[i] + f[i - 1][0], f[i - 1][1]);AC代码:#include <bits/stdc++.原创 2021-01-19 19:45:57 · 240 阅读 · 0 评论 -
Mashmokh and ACM(dp)
题目链接: Mashmokh and ACM大致题意:给出正整数n和k,求满足最大数是n并且后一元素可以整除前一元素长度为k的序列个数解题思路:f[i][j]表示长度是i,当前位是j的序列个数转移方程:f[i][j]=f[i][j]+f[i-1][k](j可以整除k)AC代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int mod = 1e9 + 7;const in原创 2021-01-17 22:52:45 · 212 阅读 · 0 评论 -
Orac and Model(最长上升子序列)
题目链接: Orac and Models大致题意:给出n个数的值,求出满足下标j整除i并且a[j]>a[i]的最多个数(j>i)解题思路:最长上升子序列的变形转移方程:f[j]=max(f[j],f[i]+1)AC代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const int N = 1e5 + 10;int原创 2021-01-17 22:36:47 · 233 阅读 · 0 评论 -
Vacations(dp)
题目链接: Vacations大致题意:有三种状态:0表示休息,1表示学习,2表示运动,三表示学习运动二选一给出n种状态,问最少可以休息几天(连续两天不能做同一件事)解题思路:dp[i][j]来表示第i天做j事的最小休息天数AC代码:#include <bits/stdc++.h>using namespace std;const int N = 200, INF = 0x3f3f;int n;int a[N];int f[N][4];int main() {原创 2021-01-17 13:48:48 · 177 阅读 · 0 评论 -
Art Union(dp)
题目链接: Art Union大致题意:m幅画,n个画家,每个画家加工每幅的时间给出,从1-m的顺序加工每幅画,且每幅画必须由1~n画家按顺序加工,若i号画家加工完第j幅画即可以进入下一幅画加工,前提是i-1号画家已经将第j+1幅画加工完,否则需要等他加工完求每幅画第n号画家加工完的时间解题思路:f[i][j]表示第i个人完成第j幅画需要的时间转移方程:f[i][j] = max(f[i - 1][j], f[i][j - 1]) + f[i][j]AC代码:#include <原创 2021-01-14 14:03:33 · 134 阅读 · 0 评论 -
WOW Factor(dp)
题目链接: WOW Factor大致题意:给一个含v和o的字符串,两个连续的v可以组成一个w,求该字符串的子串中可以组成wow的子串有多少个解题思路:l[i]表示1-i包含v的个数,r[i]表示i-n包含v的个数遍历字符串,遇到o,累加l[i-1]*r[i+1]就可以AC代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e6 + 10;int n;in原创 2021-01-11 23:45:33 · 403 阅读 · 0 评论 -
Codeforces Round #672 (Div. 2) C1. Pokémon Army (easy version)
题目链接: C1. Pokémon Army (easy version)大致题意:给出一个数组a,给出q个数组成的数组b,其中b1<b2< b3…,使得a[b1] − a[b2] + a[b3] …最大,简单版q=0解题思路:前面是+,后面一定是-,前面是-,后面一定是+定义f[i][0]表示到第i个元素结尾执行+的最大值,f[i][1]表示到第i个元素结尾执行-的最大值转移方程: f[i][0] = max(f[i - 1][0], f[i - 1][1] + a[i]);原创 2021-01-09 23:02:45 · 103 阅读 · 0 评论 -
HDU - 3652 B-number(两种模板!!)
题目链接: B-number大致题意:统计区间 [1,n] 中含有 ‘13’ 且模 13 为 0 的数字的个数解题思路:有两种做法,一种是预处理,一种是记忆化搜索,两种都可以作为板子(个人认为记忆化搜索更简单)特别说明一下:第一种预处理的方法最后要特判一下n本身,或者可以直接传参为n+1也可以AC代码:#include<iostream>#include<algorithm>#include<cstring>#include<vector&原创 2020-12-04 19:52:21 · 95 阅读 · 0 评论 -
HDU - 1176 免费馅饼(数塔类型DP)
题目链接: 免费馅饼大致题意:在0到10的坐标上,会掉落n个馅饼,给出馅饼掉落的位置和时间,主人公一次只能接到他所在位置即左右三个位置上掉落的馅饼,求主人公最多可以接到多少馅饼(初始在5这个位置)解题思路:数她 逆着dpAC代码:#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int N = 15, M = 1e5 + 10;原创 2020-11-12 20:23:33 · 502 阅读 · 0 评论 -
2020 China Collegiate Programming Contest Qinhuangdao Site- Kingdom’s Power(树形dp)
题目链接: Kingdom’s Power大致题意:有一棵树,国王的国家在1号节点,他有无数只军队,每次可以使一支军队移动一步到相邻节点(不是所有出动的军队同时移动一步),军队到达的节点表示被国王征服,问最少移动几次军队可以征服所有节点解题思路:初始化f数组记录从根到每一个节点的距离(后面会用到)假设,当前深度为10的结点A存在2条子链,左边的长度为3,右边的长度为5,那么最优的走法是从当前结点走向左边,再由左边的叶子走向右边的叶子既然要求移动步数最少,所以我们要尽可能的利用叶子节点这时我们原创 2020-10-20 23:28:05 · 247 阅读 · 0 评论 -
HDU - 1069 Monkey and Banana(dp 最长有序子序列)
题目链接: [Monkey and Banana]大致题意:给你n种长方体,计算最高能堆多高(要求位于上面的长方体的长要大于下面长方体的长,上面长方体的宽大于下面长方体的宽)解题思路:相当于最长有序子序列一种长方体有六种摆法,但通过长宽排序后,还有三种摆法,将所有的摆法先按长后按宽从小到大排序,然后就是最长有序子序列的思路了dp[i]表示前i种摆法的最大高度AC代码:#include <bits/stdc++.h>using namespace std;typedef原创 2020-09-13 20:30:09 · 154 阅读 · 0 评论 -
HDU - 1024 Max Sum Plus Plus(dp)
题目链接: [Max Sum Plus Plus]大致题意:在n个数中找出m个连续区间,使其加和最大解题思路:dp[i][j]代表j个数分成i组的最大值递推式:dp[i][j]=max(dp[i][j-1]+a[j],dp[i-1][k]+a[j]) (0<k<j)数据1e6,这样写会超时,我们思考一下,递推式中dp[i-1][k]代表使前j-1个数分成i-1组的最大值,我们可以用Max数组来代替他,Max[j]的作用就是存前j个数的最大值,所以更新递推式为dp[i]=max原创 2020-09-13 19:01:31 · 94 阅读 · 0 评论 -
POJ - 1163 The Triangle(递推+记忆化搜索)
题目链接: [The Triangle]大致题意:计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大解题思路:递推+记忆化搜索初始化dp为-1,如果dp>=0,说明计算过,就不需要再次递归了时间复杂度O(n2)AC代码:#include<iostream>#include<algorithm>typedef long long ll;using namespace std;const int N = 200;int dp[N][N];原创 2020-09-13 09:02:16 · 113 阅读 · 0 评论 -
POJ - 1080 Human Gene Functions (LCS变形)
题目链接: [Human Gene Functions]大致题意:给定两个字符串 s1 和 s2 ,在两个串中都可以插入空格,使两个串的长度最后相等,然后开始匹配,怎样插入空格由匹配规则得到的值最大解题思路:LCS的变形状态转移:dp[i] [j] = max(dp[i - 1][j - 1] + match[s1[i]][s2[j]], dp[i - 1][j] + match[s1[i]][’ ‘]);dp[i][j] = max(dp[i][j], dp[i][j - 1] + ma原创 2020-09-13 08:33:39 · 102 阅读 · 0 评论 -
HDU - 1503 Advanced Fruits(dp回溯)
题目链接: [Advanced Fruits]大致题意:找出这两个串的最长公共子序列,然后加上这两个串中减去公共子序列的字符,最后输出解题思路:先求出最长公共子序列的dp数组,然后回溯整个求解过程AC代码:#include <bits/stdc++.h>typedef long long ll;using namespace std;char s1[1000], s2[1000];int dp[1000][1000];int l1, l2;void LCS() {原创 2020-09-12 22:40:14 · 144 阅读 · 0 评论 -
HDU - 1087 Super Jumping! Jumping! Jumping!(dp 最大递增子序列和 )
题目链接: [Super Jumping! Jumping! Jumping!]大致题意:长度为n的序列,找到一条单调递增但不一定连续的序列,求其序列和解题思路:dp[i]表示的是前i个并且包含第i个的最大递增子序列和若a[i]>a[j]并且满足dp[j] + a[i] > dp[i],dp[i]=dp[j]+a[i]AC代码:#include <bits/stdc++.h>typedef long long ll;using namespace std;l原创 2020-09-12 21:55:52 · 106 阅读 · 0 评论 -
HDU - 1003 Max Sum(dp)
题目链接: [Max Sum]大致题意:给你一个序列,求最大区间和以及该最大区间的下标解题思路:dp[i]代表以a[i]结尾的最大区间和两种情况:1.dp[i]是正的 那么以a[i]结尾的最大区间和就是dp[i-1]+a[i](因为必须是a[i]结尾,a[i]是正是负都无法取舍的)2.dp[i]是负的 那么以a[i]结尾的最大区间和就是a[i]状态转移方程:dp[i] = max( dp[i-1]+a[i], a[i] )可以将dp数组和a数组合并AC代码:#include <原创 2020-09-12 21:28:37 · 71 阅读 · 1 评论 -
HDU - 2182 Frog(dp)
题目链接: [Frog]大致题意:有一只青蛙,有n个节点,开始时在1节点,有k次往右跳的机会,每次跳的距离是a-b之间每个节点有一个值,到达那个节点则总值加上那个值求最大能得到的值解题思路:dp[i][j]表示走i步到达j位置能得到的最大值AC代码:#include <bits/stdc++.h>typedef long long ll;using namespace std;int s[200];int dp[200][200];int main(void){原创 2020-09-12 09:46:06 · 199 阅读 · 0 评论 -
HDU - 1257 最少拦截系统(dp 三种方法)
题目链接: [最少拦截系统]大致题意:拦截系统一发炮弹可以到达任意高度拦截敌方导弹,但以后这发炮弹都不能超过之前的高度,就是无法再次拦截比他高的导弹。然后给出一些导弹,问最少需要多少套拦截系统解题思路:首先看似是找递减子序列,但是他是LIS(最长递增子序列)的裸体,下面解释:模拟样例,首先找到一个最长的递减序列X{389,300,299,170,158,65},去掉这些数,再找递减序列Y{207,155},在Y中,至少有一个数a大于X中的某些数(否则a比X的所有数都小),所以,从每个拦截系统中原创 2020-09-12 08:48:26 · 173 阅读 · 0 评论 -
HDU - 1159 Common Subsequence(最长公共子序列 dp)
题目链接: [Common Subsequence]大致题意:求两个序列的最长公共子序列解题思路:子序列与字串不同,子序列不一定连续,dp[i][j]表示子序列xi和yi的最长公共子序列两种情况:1.xi==yi,dp[i][j]=dp[i-1][j-1]+1;2.xi!=yi,取dp[i-1][j]和dp[i][j-1]的最大值;AC代码:#include <bits/stdc++.h>typedef long long ll;using namespace std原创 2020-09-11 10:07:36 · 177 阅读 · 0 评论