$ Greatest Common Increasing Subsequence $

大致题意:给出两个长度不一定相等的数列,求其中最长的公共的且单调递增的子序列(需要具体方案)



$ solution: $

这道题如果不看具体方案,且我们要求的子序列不存在相同的元素,那么我们可以用 $ cdq $ 分治来搞搞,首先我们记录第二个数列中的元素在第一个数列里出现的位置(假设不存在重复,没有的不管),然后我们的第二个数列的每一个元素就有两个权值了,这是我们只需要两个权值均单调递增即可(这是 $ cdq $ 完全可以干的事情)

但是这道题的限制太多了,不过相应的它的数据范围也比较宽松允许 $ n^2 $ ,而众所周知复杂度越高的算法覆盖面越广,而且我们知道我们要求的序列其中每一个元素必然在两个数列中都存在且从前往后排列,所以我们模仿LCS的几种求法中的第一种。其实这一题和它很像,只不过由于“上升”这两个字而是它状态转移发生了变化。

我们由于要“上升”,那我们的转移显然不能只看上一个状态,在枚举到了哪一个 $ A[i] $ 时,我们所有的小于 $ A[i] $ 的 $ B[j] $ 都可以作为待定的“上一个状态”,只要枚举到了一个和 $ A[i] $ 相同的 $ B[j] $ 我们都可以用这个“上一个状态”转移过来也就是:

$ F[i][j]=max{F[i-1][k]_{B[k]<A[i]} }+1 $



$ code: $

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set> #define ll long long
#define db double
#define inf 0x7fffffff
#define rg register int using namespace std; int t,n,m,ans,tt;
int a[505];
int b[505];
int f[505][505];
int s[505][505]; inline int qr(){
register char ch; register bool sign=0; rg res=0;
while(!isdigit(ch=getchar())) if(ch=='-')sign=1;
while(isdigit(ch)) res=res*10+(ch^48),ch=getchar();
return sign?-res:res;
} inline void print(int i,int j){
if(i)for(;i;--i)if(s[i][j]!=-1)
print(i-1,s[i][j]),printf("%d ",b[j]);
} int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
t=qr();
while(t--){
n=qr(); for(rg i=1;i<=n;++i) a[i]=qr();
m=qr(); for(rg i=1;i<=m;++i) b[i]=qr();
for(rg i=1;i<=n;++i){ rg v=0;
for(rg j=1;j<=m;++j){ s[i][j]=-1;
if(a[i]==b[j])f[i][j]=f[i-1][v]+1,s[i][j]=v;
else f[i][j]=f[i-1][j];
if(b[j]<a[i]&&f[i-1][j]>f[i-1][v])v=j;
}
} ans=0;
for(rg i=1;i<=m;++i) if(f[n][i]>f[n][ans])ans=i;
printf("%d\n",f[n][ans]);
if(f[n][ans]){print(n,ans); puts("");}
}
return 0;
}

最长公共上升子序列 (poj 2127) (Greatest Common Increasing Subsequence)的更多相关文章

  1. POJ 2127 Greatest Common Increasing Subsequence

    You are given two sequences of integer numbers. Write a program to determine their common increasing ...

  2. POJ 2127 Greatest Common Increasing Subsequence -- 动态规划

    题目地址:http://poj.org/problem?id=2127 Description You are given two sequences of integer numbers. Writ ...

  3. 【简单dp】poj 2127 Greatest Common Increasing Subsequence【最长公共上升子序列】【模板】

    Sample Input 5 1 4 2 5 -12 4 -12 1 2 4 Sample Output 2 1 4 题目:给你两个数字序列,求出这两个序列的最长公共上升子序列.输出最长的长度,并打表 ...

  4. POJ 1423 Greatest Common Increasing Subsequence【裸LCIS】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1423 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  5. LCIS POJ 2172 Greatest Common Increasing Subsequence

    题目传送门 题意:LCIS(Longest Common Increasing Subsequence) 最长公共上升子序列 分析:a[i] != b[j]: dp[i][j] = dp[i-1][j ...

  6. ZOJ 2432 Greatest Common Increasing Subsequence(最长公共上升子序列+路径打印)

    Greatest Common Increasing Subsequence 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problem ...

  7. HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】

    HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...

  8. HDU 1423 Greatest Common Increasing Subsequence(最长公共上升LCIS)

    HDU 1423 Greatest Common Increasing Subsequence(最长公共上升LCIS) http://acm.hdu.edu.cn/showproblem.php?pi ...

  9. HDU 1423 Greatest Common Increasing Subsequence(LICS入门,只要求出最长数)

    Greatest Common Increasing Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536 ...

随机推荐

  1. 【luogu】P1772物流运输(最短路+DP)

    题目链接 对于本题我们设ext[i][j]计算第i个码头在前j天总共有几天不能用(其实就一前缀和),设dis[i][j]是从第i天到第j天不变运输路线的最短路径,设f[i]是前i天运输货物的最小花费. ...

  2. BZOJ 1113 Wall ——计算几何

    凸包第一题. 自己认为自己写的是Andrew 其实就是xjb写出来居然过掉了测试. 刚开始把pi定义成了int,调了半天 #include <map> #include <cmath ...

  3. BZOJ 2300 [HAOI2011]防线修建 ——计算几何

    只需要倒着插入,然后维护一个凸包就可以了. 可以用来学习set的用法 #include <map> #include <set> #include <cmath> ...

  4. POJ 2914 Minimum Cut 全局最小割

    裸的全局最小割了吧 有重边,用邻接矩阵的时候要小心 #include<iostream> #include<cstdio> #include<bitset> #in ...

  5. 刷题总结——蚯蚓(NOIP2016DAY2T2)

    题目: 题目背景 NOIP2016 提高组 Day2 T2 题目描述 本题中,我们将用符号 

  6. 【leetcode dp】Dungeon Game

    https://leetcode.com/problems/dungeon-game/description/ [题意] 给定m*n的地牢,王子初始位置在左上角,公主在右下角不动,王子要去救公主,每步 ...

  7. Yii 之cookie的使用

    public function actionIndex(){ //设置cookie(注意这里用的是响应组件) $cookies = \YII::$app->response->cookie ...

  8. 使用EventNext实现基于事件驱动的业务处理

    事件驱动模型相信对大家来说并不陌生,因为这是一套非常高效的逻辑处理模型,通过事件来驱动接下来需要完成的工作,而不像传统同步模型等待任务完成后再继续!虽然事件驱动有着这样的好处,但在传统设计上基于消息回 ...

  9. CAN 和 CANopen的区别和联系

    1.CAN与CANopen的共同点与不同点:  CAN只定义了物理层与链路层,而没有定义用户层,用户可根据自己的需要定义一些网络上的通信约定:  CANopen是在CAN的基础上定义了用户层,即规定了 ...

  10. spring启动时加载字典表数据放入map

    import java.util.HashMap; import java.util.List; import org.springframework.beans.factory.annotation ...