hdu1423LCIS zoj2432 必须掌握!
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 必须掌握!的更多相关文章
- zoj2432 hdoj1423 最长公共上升子序列(LCIS)
zoj2431 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2432 hdoj 1423 http://acm.hdu. ...
- zoj2432
/* 首先,dp的最开始是定义状态 dp[i][j] 表示A串的前i个,与B串的前j个,并以B[j]为结尾的LCIS 的长度. 状态转移方程: if(A[i]==B[j]) dp[i][j]=max( ...
- OJ题目分类
POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...
随机推荐
- Hive记录-配置客户端可视化管理工具远程连接
配置客户端远程连接(方便可视化工具操作)-不需要在hive服务器上敲命令了 1.安装DBeaver工具:https://dbeaver.com/download/ 2.准备相关驱动文件(服务器上hiv ...
- webstorm常用功能FTP,及常用快捷键
常用的FTP功能截图如下: 打开配置窗口 常用配置选项,填好FTP登录信息后点 Test FTP 测试一下,(测试之前,这里选“被动模式”) 默认选哪个FTP上传 注意这里的路径是开发后的上传和访问路 ...
- WF控制台工作流(1)
简单使用WF工作流示例: using System; using System.Linq; using System.Activities; using System.Activities.State ...
- HDU4635 Strongly connected【强连通】
题意: 给一个n个点的简单有向图,问最多能加多少条边使得该图仍然是简单有向图,且不是强连通图.简单有向图的定义为:没有重边,无自环. 强连通图的定义为:整个图缩点后就只有一个点,里面包含n个原点,也就 ...
- adb的使用
前面配置了环境变量,可以在计算机任何位置打开cmd窗口使用adb. 连接android应用 使用connect命令连接盒子的ip(要确保电脑所连接的网络和盒子是一个网络) 抓日志 抓取某一个操作过程的 ...
- UML 类图 说明
继承关系用空心三角形+实线来表示 关联:就是属性 聚合: 合成:组成 依赖:作为参数存在
- Linux的7个运行级别
0:关机 1:单用户(找回丢失密码)此模式下所有用户不需要密码即可登录,可用于重置密码 2:多用户状态没有网络服务 3:多用户状态有网络服务 ★ 4:系统未使用保留给用户 5:图形界面 ★ 6:系统重 ...
- 【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用
0x1 PE文件与免杀思路 基于PE文件结构知识的免杀技术主要用于对抗启发式扫描. 通过修改PE文件中的一些关键点来达到欺骗反病毒软件的目的. 修改区段名 1.1 移动PE文件头位置免杀 工具:PeC ...
- Python3 Win下安装 scipy
没有利用Anaconda安装python库时可能遇到一些问题,例如直接 pip3 install scipy 可能报错,安装失败.原因是Scipy的安装需要依赖MKL库,官方的Numpy不包含MKL, ...
- The videobuf2 API【转】
转自:https://blog.csdn.net/paul_liao/article/details/8986999 The videobuf2 API Author:CJOK Contact:cjo ...