最長非減字串3 (最長公共子串) 銀牌
2022-10-19 22:31 作者:信奧賽USACO鄭老師 | 我要投稿
//最長遞增(非減少)子序列
//最長公共子序列法
#include<bits/stdc++.h>
using namespace std;
const int MN=100;
int d[MN][MN];
vector<int> a,b;
int lcs(int m,int n){
? ? if(m<0 || n<0){//序列列舉完了,遞歸退出
? ? ? ? return 0;
? ? }
? ? if(d[m][n]>0){//恢復(fù)記憶
? ? ? ? return d[m][n];
? ? }
? ? if(a[m]==b[n]){
? ? ? ? d[m][n]=lcs(m-1,n-1)+1;
? ? }else{
? ? ? ? d[m][n]=max(lcs(m-1,n),lcs(m,n-1));
? ? }
? ? return d[m][n];
}
int main(){
? ? int n;
? ? cin>>n;
? ? for(int i=0;i<n;i++){
? ? ? ? int tmp;
? ? ? ? cin>>tmp;
? ? ? ? a.push_back(tmp);
? ? ? ? b.push_back(tmp);
? ? }
? ? sort(b.begin(),b.end());
? ? cout<<lcs(a.size()-1,b.size()-1)<<endl;//從0到size-1
? ? return 0;
}
標(biāo)簽: