洛谷 P1439 【模板】最長公共子序列


洛谷 P1439 【模板】最長公共子序列

$$傳送門啦$$


題目描述

給出\(1-n\)的兩個排列\(P1\)\(P2\),求它們的最長公共子序列。


輸入輸出格式

輸入格式:

第一行是一個數\(n\)

接下來兩行,每行為\(n\)個數,為自然數\(1-n\)的一個排列。


輸出格式:

一個數,即最長公共子序列的長度


輸入輸出樣例

輸入樣例#1:

5
3 2 1 4 5
1 2 3 4 5

輸出樣例#1:

3


說明

【數據規模】

對於\(50%\)的數據,\(n≤1000\)

對於\(100%\)的數據,\(n≤100000\)

思路

一看到是一道模板題就覺得不會很難,但還是看到數據時瞬間覺得**,只會五十分的我......所以就發五十分代碼吧,什么時候我會了\(n log n\)的做法再來更

50分代碼

#include<bits/stdc++.h>
using namespace std;

int a[101001],b[101001];
int f[10000][10001];
int n;

int main() {
	scanf("%d",&n);
	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++) {
		for(int j=1; j<=n; j++) {
			f[i][j]=max(f[i-1][j],f[i][j-1]);
			if(a[i]==b[j]) {
				f[i][j]=max(f[i][j],f[i-1][j-1]+1);
			}
		}
	}
	cout<<f[n][n]<<'\n';
	return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM