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 ...
随机推荐
- 跨平台设置NODE_ENV(兼容win和linux)
通过NODE_ENV可以来设置环境变量(默认值为development).一般我们通过检查这个值来分别对开发环境和生产环境下做不同的处理.可以在命令行中通过下面的方式设置这个值: linux & ...
- 20190311 Windows上ZooKeeper伪集群的实现
1. 复制并修改conf/zoo.cfg文件 以zoo1.cfg为例: dataDir=E:\\Develop\\zookeeper\\3.4.6\\zookeeper-3.4.6\\data1 da ...
- Python全栈问答小技巧_2
Python全栈测试题(二) 作者:尹正杰 声明:答案如有偏差,欢迎指正!欢迎加入高级运维工程师之路:598432640 本文答题用的Python版本是:Python 3.5.2,请知晓! 1. 计算 ...
- python---模板引擎
布局文件layout.html:就是对文件的格式化输出(对其中的标签进行替换) <!DOCTYPE html> <html lang="en"> <h ...
- 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()【转】【补】
一,$.get(url,[data],[callback]) 说明:url为请求地址,data为请求数据的列表(是可选的,也可以将要传的参数写在url里面),callback为请求成功后的回调函数,该 ...
- DotNetBar 控件设置空内容时显示内容
可以通过修改所有关于Watermark时的设置.
- Hibernate添加日志--log4j
需要导入 slf4j-log4j12-1.6.2.jar slf4j-api-1.6.2.jar log4j-1.2.16.jar 三个jar文件 编写properties文件,建议将日志输出级别设置 ...
- Linux下解压缩
1)对于.tar结尾的文件 tar -xf all.tar 2)对于.gz结尾的文件 gzip -d all.gz gunzip all.gz 3)对于.tgz或.tar.gz结尾的文件 tar -x ...
- 求web前端面试题库及答案
1.对WEB标准以及W3C的理解与认识 标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索几率.使用外 链css和js脚本.结构行为表现的分离.文件下载与页面速度更快.内容能被更多的用户所访问.内容能被 ...
- shell-检测服务是否运行,并记日志
目的:每隔*分钟检测服务是否运行:若运行中,则记录执行的进程名称:若不运行,记录当前时间 shell: #!/bin/bash date=`date +%Y%m%d` log=/home/mono_$ ...