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 ;
}
目录
相关文章
|
7月前
leetcode-521:最长特殊序列 Ⅰ
leetcode-521:最长特殊序列 Ⅰ
47 0
【动态规划刷题 14】最长递增子序列的个数&& 最长数对链
【动态规划刷题 14】最长递增子序列的个数&& 最长数对链
|
2月前
acwing 895 最长上升子序列1
acwing 895 最长上升子序列1
30 3
|
2月前
acwing 896 最长上升子序列II
acwing 896 最长上升子序列II
27 2
|
7月前
代码随想录 Day44 动规12 LeetCode T300 最长递增子序列 T674 最长连续递增序列 T718 最长重复子数组
代码随想录 Day44 动规12 LeetCode T300 最长递增子序列 T674 最长连续递增序列 T718 最长重复子数组
66 0
|
算法
代码随想录算法训练营第五十二天 | LeetCode 300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
代码随想录算法训练营第五十二天 | LeetCode 300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
51 1
算法修炼Day57|647. 回文子串 ● 516.最长回文子序列
算法修炼Day57|647. 回文子串 ● 516.最长回文子序列
|
算法 C++
每日算法系列【LeetCode 329】矩阵中的最长递增路径
每日算法系列【LeetCode 329】矩阵中的最长递增路径
代码随想录刷题|LeetCode 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组
代码随想录刷题|LeetCode 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组
代码随想录刷题|LeetCode 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组
|
算法 测试技术
最长上升子序列(LeetCode-300)
最长上升子序列(LeetCode-300)
98 0
最长上升子序列(LeetCode-300)