一维数组解最长上升公共子序列(LCIS)

#include<bits/stdc++.h>
using namespace std;
const int maxn = 3000 + 10;
int n,a[maxn],b[maxn],dp[maxn];
int main()
{
    scanf("%d",&n);
    memset(dp,0,sizeof(dp));
    for(int i = 1;i <= n;i ++)
        scanf("%d",&a[i]);
    for(int i = 1;i <= n;i ++)  
        scanf("%d",&b[i]);
    for(int i = 1;i <= n;i ++)
    {   
        int maxn = 0;
        for(int j = 1;j <= n;j ++)
        {
            if(a[i] > b[j]) maxn = max(maxn,dp[j]);
            if(a[i] == b[j]) dp[j] = maxn + 1;
        }
    }
    int ans = 0;
    for(int i = 1;i <= n;i ++) 
      ans = max (ans,dp[i]);
    printf("%d",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/Roni-i/p/8628583.html