【CF10D】 LCIS
最长公共上升子序列
\(f[i][j]\)表示\(A\)的前\(i\)个数,匹配\(B\)的第\(j\)个数,且\(B[j]\)必选时的最长公共上升子序列长度
转移:
if(A[i]==B[j]) dp[i][j]=max(dp[i-1][k])+1; k=[1,2,...,j-1],B[k]<B[j]=A[i]
else dp[i][j]=dp[i-1][j];
记录一下\(dp[i-1][j]\)最大的\(B[k]<B[j]\),优化到\(O(n^2)\)
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int MAXN=510;
inline int read(){
int x=0; char c=getchar();
while(c<'0') c=getchar();
while(c>='0') x=x*10+c-'0',c=getchar();
return x;
}
int n,m,A[MAXN],B[MAXN];
int dp[MAXN][MAXN],g[MAXN][MAXN],pre[MAXN][MAXN];
inline void dfs(int i,int x){
if(!x) return;
dfs(i-1,pre[i][x]);
if(pre[i][x]!=x)
printf("%d ",B[x]);
}
int main()
{
n=read();
for(int i=1;i<=n;++i)
A[i]=read();
m=read();
for(int i=1;i<=m;++i)
B[i]=read();
for(int i=1;i<=n;++i){
int k=0;
for(int j=1;j<=m;++j){
dp[i][j]=dp[i-1][j];
pre[i][j]=j;
if(A[i]==B[j])
dp[i][j]=dp[i-1][k]+1,pre[i][j]=k;
if(B[j]<A[i]&&dp[i-1][j]>dp[i-1][k]) k=j;
}
}
int Ans=0,k=0;
for(int i=1;i<=m;++i)
if(dp[n][i]>Ans) Ans=dp[n][i],k=i;
printf("%d\n",Ans);
dfs(n,k);
return 0;
}
【CF10D】 LCIS的更多相关文章
- 【CF10D】LCIS(LCIS)
题意:求两个序列的LCIS n,m<=300,a[i]<=1e9 题意:O(n^2) O(n^3)的话设dp[i,j]为A终点为a[1..i]且B终点为b[j]的最大长度,分a[i]==b ...
- 【二维树状数组】【CF10D】 LCIS
传送门 Description 给你两个串,求他们的最长公共上升子序列 Input 第一行是第一个串的长度\(n\) 第二行\(n\)个数代表第一个串 第三行是第二个串的长度\(m\) 第四行\(m\ ...
- 【43.49%】【hdu3308】LCIS
Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission ...
- 【HDU3308】LCIS
题目大意:维护一个长度为 N 的序列,支持单点修改,区间查询最长连续上升子序列的长度. 题解: 线段树维护一段区间左端点开始的 LCIS 长度,右端点开始的 LCIS 长度以及区间最优解.考虑进行合并 ...
- 【题解】LCIS
题目描述 给定两个整数序列,写一个程序求它们的最长上升公共子序列. 输入格式 每个序列用两行表示,第一行是长度L,第二行是该序列. 输出格式 在第一行,输出该LCIS的长度.第二行,输出该LCIS. ...
- 【14.06%】【hdu 5904】LCIS
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission ...
- HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】
HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
随机推荐
- Redmine添加插件
注意:插件的安装必须到Plugins对应的文件目录执行命令! Plugins Plugin list A full list of available Redmine plugins can be f ...
- bizcharts 图表内容居中
当图表内的数据只有一组时,会紧靠在y轴上,如下图: 想要图表的内容居中,解决方法分两种情况. 第一种:如果x轴是日期,则代码设置如下,图表的内容就居中了 const cols = { x: { ali ...
- Obloq模块:基于ESP8266的物联网模块
OBLOQ 物联网模块 OBLOQ模块是DFRobot公司开发的一款基于ESP8266芯片的物联网通信模块.模块使用串口(TTL UART)和Arduino(或者其他单片机)通信,支持MQTT,HTT ...
- 【转帖】修改Windows网卡的MTU
修改Windows网卡的MTU https://blog.csdn.net/sunny05296/article/details/103438653 原创sunny05296 发布于2019-12-0 ...
- ext.net 这两个id不是同一个对象,小心!
今天遇到了一个很奇怪的问题,查到最后发现是下面代码原因 代码中使用store存储js对象 mcp_liststore.data.items[3].id mcp_liststore.data.get(3 ...
- WPF 精修篇 属性动画
原文:WPF 精修篇 属性动画 属性动画 是通过 Storyboard 来改变属性值 <Rectangle x:Name="rect" Width="200&quo ...
- Markdown
Cygwin Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. Markdown具有一系列衍生版本,用于扩展Markdown ...
- 简单地判断判断两矩形相交/重叠 C#
最近需要用到矩形相交算法的简单应用,所以特地拿一个很简单的算法出来供新手参考,为什么说是给新手的参考呢因为这个算法效率并不是很高,但是这个算法只有简简单单的三行.程序使用了两种方法来判断是否重叠/相交 ...
- ASP.NET Core使用MongoDB数据库
环境:Asp.Net Core Mvc 2.2,MongoDB 4.09 参考文档:http://mongodb.github.io/mongo-csharp-driver/ http://mongo ...
- python plotly画柱状图
代码 import pandas as pd import numpy as np import plotly.plotly as py import plotly.graph_objs as go ...