欢迎光临散文网 会员登陆 & 注册

最长非减字串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){//恢复记忆

        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;

}


最长非减字串3 (最长公共子串) 银牌的评论 (共 条)

分享到微博请遵守国家法律