比赛 H大佬的水题争霸赛 评测结果 AAAAAAAAAAAAAAA
题目名称 最长公共上升子序列 最终得分 100
用户昵称 雾茗 运行时间 0.050 s
代码语言 C++ 内存使用 0.39 MiB
提交时间 2018-08-04 16:43:42
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstdlib>
using namespace std;
int a[10001];
int b[10001];
int n,m;
int lengthOfLCIS() {
    int ans=0;
    int dp[1050][1050]={0};
    int max_dp=0;
    for (int i=0;i<n;++i) {
        for (int j=0;j<m;++j) {
            dp[i+1][j+1]=dp[i][j+1];
            if (a[i]==b[j]) {
                max_dp=0;
                for (int k=0;k<j;++k){
                    if (b[j]>b[k]&&max_dp<=dp[i][k+1]){
                        max_dp=dp[i][k+1];
                    }
                }
                dp[i+1][j+1]=max_dp+1;
            }
            ans=ans>dp[i+1][j+1]?ans:dp[i+1][j+1];
        }
    }
    return ans;
}
int main(){
	int anss;
	freopen("lcis.in","r",stdin);
	freopen("lcis.out","w",stdout);
	cin>>n;
	for (int i = 0 ; i < n ; ++i) {
		cin>>a[i];
	}
	cin>>m;
	for (int j = 0 ; j < m ; ++j) {
		cin>>b[j];
	}
	anss=lengthOfLCIS();
	cout<<anss;
}