P1071 LCIS 最长公共上升子序列
来源:互联网 发布:18u网络机柜 编辑:程序博客网 时间:2024/05/16 10:36
定义状态d [ i ] [ j ]表示以a数组的前i个元素,b数组的前j个元素并且以b[j]为结尾的LCIS的长度。
首先:a [ i ] != b[j]时, d[i]
举个例子
a={1, 4, 2, 5, -12} b ={5, -12, 1, 2, 4, 5}
5 -12 1 2 4 5 1 0010004 00102020012205101223-12111223if(a[i] == b[j])
d[i][j] = mx + 1;
else if(a[i] > b[j] && mx < d[i-1][j])
mx = d[i-1][j];
//只有当a[i] > b[j]时,才更新mx, 保证了所求序列是上升的。
仔细看表格会发现: 若d[i][j] > 0 的话,那么在数组a前i个元素中一定存在a[k]( 1 <= k <= i)等于b[j]. 否则说明前i个a元素中没有与b[j]相同的元素。
import java.util.Scanner;public class Main{public static void main(String[] args){Scanner cin=new Scanner(System.in);int n=cin.nextInt();int[] a=new int[n+1];int[] b=new int[n+1];int[][] f=new int[n+1][n+1];for(int i=1;i<=n;i++)a[i]=cin.nextInt();for(int i=1;i<=n;i++)b[i]=cin.nextInt();int ans=0;int max;for(int i=1;i<=n;i++){max=0;for(int j=1;j<=n;j++){f[i][j]=f[i-1][j];if(a[i]>b[j]&&f[i-1][j]>max)max=f[i-1][j];if(a[i]==b[j])f[i][j]=max+1;}}for(int j=1;j<=n;j++)ans=Math.max(ans, f[n][j]);System.out.println(ans);}}
0 0
- P1071 LCIS 最长公共上升子序列
- 最长公共上升子序列(LCIS)
- [DP]最长公共上升子序列LCIS
- 最长公共上升子序列 LCIS
- 最长公共上升子序列LCIS
- 最长公共上升子序列 LCIS
- 最长上升公共子序列(LCIS)
- Codevs_P2185 最长公共上升子序列(LCIS)
- 最长公共上升子序列LCIS
- 最长公共上升子序列LCIS
- LCIS 最长上升公共子序列
- 最长公共上升子序列 LCIS
- 杭电 1423 (最长上升公共子序列 LCIS )
- 最长公共上升子序列 LCIS O(NM) 方案
- hdu 1423 最长上升公共子序列 LCIS 模板题
- LCIS最长上升公共子序列(HDU 1423)
- (LCIS)最长公共上升子序列 ZOJ 2432
- 最长公共上升子序列(LCIS)ZOJ 2432
- [Java视频笔记]day14
- 欢迎使用CSDN-markdown编辑器
- 自定义可设置每行最多显示数目,每个子View宽度等分的FlowView
- mysql的查询、子查询及连接查询
- 找出一组数中指出现一次的数2
- P1071 LCIS 最长公共上升子序列
- linux文件描述符和套接字的问题
- 下面介绍几种查看linux版本信息的方法和GCC版本
- Python 通过调用接口获取公交信息
- win7系统右键没有新建文件夹选项
- 关于Myeclipse2015的破解的详细介绍
- Python 基础学习
- PAT1010 一元多项式求导 (25)
- Zookeeper的作用