题目描述

α世界线.凤凰院凶真创立了反抗SERN统治的组织“瓦尔基里”.为了脱离α线,他需要制作一个世界线变动率测量仪.

测量一个世界线相对于另一个世界线的变动率,实质上就是要求出这两个世界线的最长公共合法事件序列.

一个世界线的事件逻辑序列是一个正整数序列,第k个数表示第k个事件发生的时间.对于一个世界线,一个合法的事件序列是事件逻辑序列的一个子序列,满足时间严格递增.

现在,对于两个不同的世间线α,β求出最长的一个事件序列,满足这个序列在α,β世界线中均是合法的.这个序列也就是之前提到过的最长公共合法事件序列.

输入描述

第一行一个整数n,表示世界线α的事件个数.

第二行n个整数a1;a2......an,表示世界线的事件逻辑序列.

第三行一个整数m,表示世界线β的事件个数.

第四行m个整数b1;b2......bm,表示世界线的事件逻辑序列.

输出描述

第一行一个整数k,表示最长公共合法事件序列的长度.

第二行k个整数,表示最长公共合法事件序列.如果有多解,输出任意一个.

样例输入

5
  1 4 2 5 1
  4
  1 1 2 4

样例输出

2

1 4

分析

虽然听机房的大佬们说这是一道最长公共上升子序列的板子题,然而我不会。。。。。。

根据最长公共序列的求法,可以考虑二维状态dp[i][j]

如果dp[i][j]表示a序列前i个事件,b序列前j个事件构成的最长公共上升子序列的长度,转移时因为不知道最后一项的大小所以无法转移

如果dp[i][j]表示a序列第i个事件,b序列第j个事件作为结尾的最长公共上升子序列的长度,转移时因为不知道前一项在哪里所以要疯狂枚举状态从而达到O(n^4)的优秀复杂度

可以试着折中一下,

用dp[i][j]表示a序列前i个事件,b序列前j个事件构成且以b序列的第j个事件为结尾的最长公共上升子序列的长度。

所以dp[i][j]就可以由dp[i-1][1~j-1]转移过来,而且这个东西还可以利用单调性优化

因为更新dp[i]这一维的时候,i是不变的,所以可以一遍dp一遍存下并维护dp[i-1][1~j](a[i]>b[j])的最大值

这样就可以从O(n^3)优化到O(n^2)了 只有我这样的菜文鸡一个板题才写这么多东西

Code

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
int n,m,x,y,en,ans,a[maxn],b[maxn],sta[maxn],dp[maxn][maxn],pre[maxn][maxn];
int main()
{
scanf("%d",&n);for(int i=;i<=n;i++)scanf("%d",&a[i]);
scanf("%d",&m);for(int i=;i<=m;i++)scanf("%d",&b[i]);
for(int i=;i<=n;i++)for(int j=;j<=m;j++)
{
dp[i][j]=dp[i-][j];
if(b[j]==a[i])dp[i][j]=dp[i-][pre[i][]]+,pre[i][j]=pre[i][];
if(b[j]<a[i]&&dp[i-][pre[i][]]<dp[i-][j])pre[i][]=j;
if(ans<dp[i][j]&&a[i]==b[j])ans=dp[x=i][y=j];
}
printf("%d\n",ans);
do
{
sta[++en]=b[y];y=pre[x][y];
while(a[x]!=b[y])x--;
}while(y);
while(en)printf("%d%c",sta[en],en==?'\n':' '),en--;
}

【CSP模拟赛】凤凰院凶真(最长公共上升子序列)的更多相关文章

  1. [CSP-S模拟测试]:凤凰院凶真(LCIS)

    题目描述 $\alpha$世界线.凤凰院凶真创立了反抗$SERN$统治的组织“瓦尔基里”.为了脱离$\alpha$线,他需要制作一个世界线变动率测量仪.测量一个世界线相对于另一个世界线的变动率,实质上 ...

  2. csps-s模拟测试60嘟嘟噜,天才绅士少女助手克里斯蒂娜,凤凰院凶真题解

    题面:https://www.cnblogs.com/Juve/articles/11625190.html 嘟嘟噜: 约瑟夫问题 第一种递归的容易re,但复杂度较有保证 第二种适用与n大于m的情况 ...

  3. CSP模拟赛游记

    时间:2019.10.5 考试时间:100分钟(连正式考试时间的一半还没有到)题目:由于某些原因不能公开. 由于第一次接触NOIinux系统所以连怎么建文件夹,调字体,如何编译都不知道,考试的前半小时 ...

  4. 【CSP模拟赛】Freda的迷宫(桥)

    题目描述 Freda是一个迷宫爱好者,她利用业余时间建造了许多迷宫.每个迷宫都是由若干房间和走廊构成的,每条走廊都连接着两个不同的房间,两个房间之间最多只有一条走廊直接相连,走廊都是双向通过.  黄昏 ...

  5. 2019/11/12 CSP模拟赛&&考前小总结

    写在前面的总结 离联赛只有几天了,也马上就要回归文化课了. 有点舍不得,感觉自己的水平刚刚有点起色,却又要被抓回文化课教室了,真想在机房再赖几天啊. 像19/11/11那场的简单题,自己还是能敲出一些 ...

  6. CSP模拟赛2游记

    这次由于有课迟到30min,了所以只考了70min. 调linux配置调了5min,只剩下65min了. T1:有点像标题统计,但要比他坑一点,而且我就被坑了,写了一个for(int i=1;i< ...

  7. 【NOIP模拟赛】【数学真奇妙】【递推】旅行者问题

    旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起 ...

  8. 【NOIP模拟赛】【数学真奇妙系列】纸盒子

    Task 1.纸盒子(box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一堆 ...

  9. 【CSP模拟赛】Freda的旗帜

    题目描述  要开运动会了,Freda承担起了制作全校旗帜的工作.旗帜的制作方法是这样的:Freda一共有C种颜色的布条,每种布条都有无数个,你可以认为这些布条的长.宽.厚都相等,只有颜色可能不同.每个 ...

随机推荐

  1. docker-每天5分钟玩转Docker容器技术

    安装 https://www.cnblogs.com/qinxu/p/10032176.html 安装教程,目前只能安装到18版本的,安装完后执行下面命令更新到版本19 yum install doc ...

  2. 【一起学源码-微服务】Netflix Eureka 源码一:Netflix Eureka 源码初探,我们为什么要读源码?

    前言 最近发现 网上好多自己的博客,很多朋友转载了文章却不加下 原载地址,本文欢迎转载一起学习,请在目录出加上原出处,感谢.转载来自:博客(一枝花算不算浪漫) 看了前面几篇文章的小伙伴知道,前几天在学 ...

  3. Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException

    转自:https://www.jb51.net/article/98644.htm Java xml出现错误 javax.xml.transform.TransformerException: jav ...

  4. 必须使用适当的属性或方法修改“ContentType”标头

    只能通过属性修改ContentType,不能添加到header属性里

  5. Deep learning_CNN_Review:A Survey of the Recent Architectures of Deep Convolutional Neural Networks——2019

    CNN综述文章 的翻译 [2019 CVPR] A Survey of the Recent Architectures of Deep Convolutional Neural Networks 翻 ...

  6. mybatis的XML中注释需谨慎

    报错内容: java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2) ...

  7. HTML&CSS基础-样式的继承

    HTML&CSS基础-样式的继承 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HTML源代码 <!DOCTYPE html> <html> & ...

  8. 2013.4.29 - KDD第十一天

    今天上午在图书馆写FIrst集,真心没写出来,算法是昨天找好的,不过实现的话还是需要很大的代码量,然后就打算用郑茂或者韩冰的代码了. 晚上图书馆快关门的时候开始思考KDD的问题, 我一开始打算给中秋发 ...

  9. 【转】spring 自定义注解(annotation)与 aop获取注解

    首先我们先介绍Java自定义注解. 在开发过程中,我们实现接口的时候,会出现@Override,有时还会提示写@SuppressWarnings.其实这个就是Java特有的特性,注解. 注解就是某种注 ...

  10. Linux 反弹shell(二)反弹shell的本质

    Linux 反弹shell(二)反弹shell的本质 from:https://xz.aliyun.com/t/2549 0X00 前言 在上一篇文章 Linux反弹shell(一)文件描述符与重定向 ...