acwing272. 最长公共上升子序列

简介: acwing272. 最长公共上升子序列

活动 - AcWing

#include<iostream>
#include<algorithm>
#include<cstring>
 
using namespace std ;
const int N = 3010 ;
int f[N][N] ;//前i个数和前j个数并且以b[j] 结尾的最长公告上升子序列 
int n  ;
int a[N] ;
int b[N] ;
int main(){
  cin >> n ;
  for(int i = 1 ; i <= n ;i ++) cin >> a[i] ;
  for(int i = 1 ; i <= n; i ++) cin >> b[i] ;
  for(int i = 1 ; i <= n ; i ++){
    int S = 0 ;
    for(int j = 1 ; j <= n ;j ++){
      f[i][j] = f[i-1][j] ;
      if(b[j-1] < a[i]) S = max(S , f[i-1][j-1] + 1) ;//因为我们更新的话只有a[i] == b[j] 的情况也就是说我们的a[i]是一直不变的,我们只需要判断新加入的b[j-1]能不能成为之前的最长公共上升子序列
 
      if(a[i]==b[j]) f[i][j] = max(S,f[i][j]) ;
      
    }
  }
  int res = 0 ;
  for(int i = 1 ; i <= n ; i ++) res = max(res,f[n][i]) ;
  cout << res << endl ;
}
#include<iostream>
#include<cstring>
#include<algorithm>
 
using namespace std ;
const int N = 3010 ;
int f[N][N] ;
int a[N],b[N] ;
int main(){
  int n ;cin >> n ;
  for(int i = 1 ; i <= n ;i ++) cin >> a[i] ;
  for(int i = 1 ; i <= n ;i ++) cin >> b[i] ;
  for(int i = 1 ; i <= n ;i ++){
    int s = 1 ;//s记录的是以a[i]结尾的最长上升子序列的最大长度
    for(int j = 1 ; j <= n ; j ++){
      f[i][j] = f[i-1][j] ;
      if(b[j] == a[i])f[i][j] = max(f[i][j], s);//找到和这层循环的a[i]相等的b[j],就用s取更新他
      if(b[j] < a[i]) s = max(s,f[i][j] + 1) ;
    }
  }
  int res = f[n][1] ;
  for(int i = 1 ; i <= n ;i ++){
    res = max(res,f[n][i]) ;
  }
  cout << res << endl ;
}
目录
相关文章
【动态规划刷题 14】最长递增子序列的个数&& 最长数对链
【动态规划刷题 14】最长递增子序列的个数&& 最长数对链
|
3天前
acwing 895 最长上升子序列1
acwing 895 最长上升子序列1
12 3
|
3天前
acwing 896 最长上升子序列II
acwing 896 最长上升子序列II
10 2
|
5月前
代码随想录 Day44 动规12 LeetCode T300 最长递增子序列 T674 最长连续递增序列 T718 最长重复子数组
代码随想录 Day44 动规12 LeetCode T300 最长递增子序列 T674 最长连续递增序列 T718 最长重复子数组
58 0
|
5月前
|
人工智能
leetcode-718:最长重复子数组
leetcode-718:最长重复子数组
46 0
|
11月前
|
算法
代码随想录算法训练营第五十二天 | LeetCode 300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
代码随想录算法训练营第五十二天 | LeetCode 300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
45 1
|
算法 Java C++
动态规划专题 最长上升序列模型 acwing 1016.最大上升子序列和
动态规划专题 最长上升序列模型 acwing 1016.最大上升子序列和
51 0
动态规划专题 最长上升序列模型 acwing 1016.最大上升子序列和
Acwing 3692. 最长连续公共子序列
Acwing 3692. 最长连续公共子序列
59 0
|
机器学习/深度学习 人工智能 算法
代码随想录训练营day52| 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组...
代码随想录训练营day52| 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组...
|
算法 Java C++
最长上升序列模型 acwing 1016.最大上升子序列和
最长上升序列模型 acwing 1016.最大上升子序列和
48 0