LCIS就是最长上升公共子序列,要结合LIS和LCS来求

LIS:f[j]=max(f[i])+1;

LCS:f[i,j]=max(f[i-1,j],f[i,j-1]或f[i-1,j-1]+1

那么对于LCIS,定义f[i][j]是以B[j]为结尾的最长公共上升子序列长度,

如果A[i]!=B[j],那么f[i][j]=f[i-1][j],

否则 f[i][j]=max(d[i-1][k])+1;1<=k<=j-1

最后扫描一次f[n][j],找到最大的

zoj2432需要用pre数组保存前驱pre[i][j]表示以b[j]结尾的上一个字符在b中的下标,即记录LCIS并输出


#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<string.h>
using namespace std;
const int maxn = + ;
#define LL long long
int n, m;
LL a[maxn], b[maxn];
int f[maxn][maxn];
int pre[maxn][maxn]; int main()
{
int T; cin >> T;
while (T--) {
scanf("%d", &n);
for (int i = ; i <= n; ++i) scanf("%lld", a + i);
scanf("%d", &m);
for (int i = ; i <= m; ++i) scanf("%lld", b + i);
memset(pre, -, sizeof(pre));
memset(f, , sizeof(f));
for (int i = ; i <= n; ++i) {
int v = , k = ;
for (int j = ; j <= m; ++j) {
// pre[i][j] = pre[i - 1][j];
f[i][j] = f[i - ][j];
if (a[i] > b[j] && v < f[i - ][j]) v = f[i - ][j], k = j;
if (a[i] == b[j] && v + >f[i][j]) f[i][j] = v + , pre[i][j] = k;
}
}
int k = ;
for (int i = ; i <= m; ++i)
if (f[n][i]>f[n][k]) k = i;
printf("%d\n", f[n][k]);
if (f[n][k] == ) continue;
int i = n;
vector<int> ans;
for (int i = n; i >= ;--i)
if (pre[i][k] != -) ans.push_back(a[i]), k = pre[i][k];
printf("%d", ans.back());
for (int i = ans.size() - ; i >= ; --i) printf(" %d", ans[i]);
printf("\n");
}
}

 

hdu1423LCIS zoj2432 必须掌握!的更多相关文章

  1. zoj2432 hdoj1423 最长公共上升子序列(LCIS)

    zoj2431  http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2432 hdoj 1423 http://acm.hdu. ...

  2. zoj2432

    /* 首先,dp的最开始是定义状态 dp[i][j] 表示A串的前i个,与B串的前j个,并以B[j]为结尾的LCIS 的长度. 状态转移方程: if(A[i]==B[j]) dp[i][j]=max( ...

  3. OJ题目分类

    POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...

随机推荐

  1. secure CRT the remote system refused the connection 解决办法

    1.安装ssh服务器和客户端 apt-get install openssh-server apt-get install openssh-client 2.重启ssh /etc/init.d/ssh ...

  2. JAVA记录-redis缓存机制介绍(三)

    Redis 事务 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的 ...

  3. Winform窗体设计工具源码

    源代码:QQ群616945527,博客资源

  4. LINQ to SQL 模拟实现 ROW_NUMBER() OVER(ORDER BY ...) 的功能

    Ø  前言 本来是想使用 LINQ 实现类似 SQL: ROW_NUMBER() OVER(ORDER BY -) 的功能,但是貌似 LINQ 不支持,反正没找到解决办法,无奈使用了LINQ Sele ...

  5. Nginx URL匹配

      Nginx 下 location模块  可以实现对网页URL进行分析处理 location ~ .*\.(gif|jpg|jpeg|png|bmg|swf)$ { // 扩展名为gif|jpg|j ...

  6. JavaScript之正方教务系统自动化教评[插件-转载]

    [声明]本插件系学院学长原创,非博主所创,发布此处,仅供学习和效仿. /** * @name:正方教务系统自动化教评-插件 * * @author:chenzhongshu * @date:2017- ...

  7. Oracle设置某张表为只读

    Oracle 11g开始支持设置某张表为只读,这样可以防范对某些表的修改,起到一定的安全性. 设置如下: --设置表为只读权限(加锁) ALTER TABLE tab_name READ ONLY ; ...

  8. 让 IE9 以下的浏览器支持 Media Queries

    1. 如何让 IE9 以下的浏览器支持 css3 的media query 需要用到的 min-width/max-width 属性 css3 的媒体查询 IE 浏览器的支持程度是从 IE9开始支持, ...

  9. linux相关设置

    mysql开机自启: [root@workstudio system]# systemctl enable mysqld

  10. Pytorch 各种奇葩古怪的使用方法

    h1 { counter-reset: h2counter; } h2 { counter-reset: h3counter; } h3 { counter-reset: h4counter; } h ...