最长上升子序列和最长公共子序列

#include <iostream>

using namespace std;

int main()
{
    int n;
    int a[100],dp[100];
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<n;i++)
    {
        dp[i]=1;
        for(int j=0;j<i;j++)
        {
            if(a[j]<a[i]&&dp[j]+1>dp[i])
                dp[i]=dp[j]+1;
        }
    }
    int ans=0;
    for(int i=0;i<n;i++)
    {
        ans=max(ans,dp[i]);
    }
    cout<<ans<<endl;
    return 0;
}

 

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    int n,m;
    int a[100],b[100],dp[100][100];
    memset(dp,0,sizeof(dp));

    cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<m;i++){
        cin>>b[i];
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i-1]==b[j-1]){
                dp[i][j]=dp[i-1][j-1]+1;
            }
            else {
                dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
            }
        }
    }
    cout<<dp[n][m]<<endl;
    return 0;
}

/**
6 7
1 5 2 6 8 7
2 3 5 6 9 8 4
**/

 

posted @ 2018-09-19 21:47  Somnus、M  阅读(185)  评论(0编辑  收藏  举报