洛谷P1410 子序列】的更多相关文章

题目描述 给定一个长度为N(N为偶数)的序列,问能否将其划分为两个长度为N/2的严格递增子序列, 输入输出格式 输入格式: 若干行,每行表示一组数据.对于每组数据,首先输入一个整数N,表示序列的长度.之后N个整数表示这个序列. 输出格式: 同输入行数.对于每组数据,如果存在一种划分,则输出“Yes!”,否则输出“No!“. 输入输出样例 输入样例#1: 6 3 1 4 5 8 7 6 3 2 1 6 5 4 输出样例#1: Yes! No! 说明 [数据范围] 共三组数据,每组数据行数<=50,…
这题的题解的贪心都是错误的...正解应该是个DP 考虑有哪些有关的条件:两个序列的当前长度, 两个序列的末尾数, 把这些都压进状态显然是会GG的 考虑两个长度加起来那一位的数一定是其中一个序列的末尾, 而我们要末尾的数尽量小, 所以完全可以把这个DP缩成两维 设f[i][j]为当前选到第i位, a[i]选入第一个序列, 则末尾为a[i], 第一个序列长度为j, 则第二个序列长度为i-j时第二个序列末尾的数最小为多少. 则有 if(a[i]<a[i+1]) f[i+1][j+1]=min(f[i+…
题目描述 你有一个长度为 \(n\) 的数列 \(\{a_n\}\) ,这个数列由 \(0,1\) 组成,进行 \(m\) 个的操作: \(1\ l\ r\) :把数列区间$ [l,r]$ 内的所有数取反.即 \(0\) 变成 \(1\) ,\(1\) 变成 \(0\) . \(2\ l\ r\) :询问数列在区间 \([l, r]\) 内共有多少个本质不同的子序列. 输入输出格式 输入格式: 第一行包含两个整数 \(n,m\),意义如上所述. 接下来一行包含 \(n\) 个数,表示数列 \(\…
题目描述 你有一个长度为 nn 的数列 \{a_n\}{an​} ,这个数列由 0,10,1 组成,进行 mm 个的操作: 1~l~r1 l r :把数列区间 [l, r][l,r] 内的所有数取反.即 00 变成 11 ,11 变成 00 . 2~l~r2 l r :询问数列在区间 [l, r][l,r] 内共有多少个本质不同的子序列. 输入输出格式 输入格式: 第一行包含两个整数 n, mn,m ,意义如上所述. 接下来一行包含 nn 个数,表示数列 \{a_n\}{an​} . 接下来 m…
题目链接. Discription 给定长度为 \(n\) 的序列 \(A\)(\(n\) 为偶数),判断是否能将其划分为两个长度为 \(\dfrac{N}{2}\) 的严格递增子序列. Solution 不妨按下标从小到大考虑每个数要分给哪一组,比较明显的 DP,朴素时空复杂度太高. 在朴素中,我们需要知道四个信息: 第一组的长度 第一组最后一个数的数值 第二组的长度 第二组最后一个数的长度 由于所有数都得填,所以当填完前 \(i\) 个数的时候,肯定有一组的末尾是 \(A[i]\),可以降一…
\[传送门啦\] 题目描述 给出\(1-n\)的两个排列\(P1\)和\(P2\),求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数\(n\), 接下来两行,每行为\(n\)个数,为自然数\(1-n\)的一个排列. 输出格式: 一个数,即最长公共子序列的长度 输入输出样例 输入样例#1: 5 3 2 1 4 5 1 2 3 4 5 输出样例#1: 3 说明 [数据规模] 对于\(50%\)的数据,\(n≤1000\) 对于\(100%\)的数据,\(n≤100000\) 思路…
洛谷题目传送门 神仙思维题. 对于两个字符串的匹配问题,似乎之前蒟蒻写的HAOI2010最长公共子序列题解中提到的建网格图模型是一种套路? 给一个稍微强一点的样例(把字母换成了ABC) AABCB BACBA 它所对应的网格图如下(横轴代表\(s\),纵轴代表\(t\),显示的点表示可达状态) 我们首先可以大致确定,所有的可达状态在一个不规则图形的界内 (红色线条).第\(i\)行(或列)的界是\([l_i,r_i]\),而且类似two pointers,\(l_i\)和\(r_i\)都随\(i…
洛谷题目传送门 一进来就看到一个多月前秒了此题的ysn和YCB%%% 最长公共子序列的\(O(n^2)\)的求解,Dalao们想必都很熟悉了吧!不过蒟蒻突然发现,用网格图貌似可以很轻松地理解这个东东? 设字符串长度为\(n,m\),那么想象我们有一个\(n+1\)行\(m+1\)列的网格图,只能从左下角往右.上两个方向走.定义每条路径的长度都为\(1\).记第\(i\)行第\(j\)列为\((i,j)\). 话说网格图真tm难画 求最长公共子序列本质上是在两个序列中寻找最多的配对,而且这些配对的…
洛谷1439:最长公共子序列(nlogn做法) 题目描述: 给定两个序列求最长公共子序列. 这两个序列一定是\(1\)~\(n\)的全排列. 数据范围: \(1\leq n\leq 10^5\) 思路: \(n^2\)很好做,不赘述. 这里有个很好的一点就是两个序列都一定是全排列,说明两个序列的元素出现的位置不一样而已,但是数字是一样的. 通过\(vis\)来记录\(A\)序列的数字出现的位置,自然也可以对应到\(B\)的位置. 接下来的步骤看样例解释一下吧. 比如说\(A\)串:\(3\ 2\…
题目:P1439 [模板]最长公共子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 关于LCS问题,可以通过离散化转换为LIS问题,于是就可以使用STL二分的方法O(nlogn)解决LCS问题! 先将a数组与一个递增的数列1,2,3...n两两对应(t数组),再把b数组中每个数在a数组中的位置表示成c数组, 经过此番操作,a与b的公共子序列在c数组中就是呈递增状态的. 代码: #include <iostream> #include <algorithm>…