1 solutions

  • 3
    @ 2024-7-25 14:41:00
    #include<bits/stdc++.h>
    using namespace std;
    const int N=210,M=10010;
    int a[N],b[M];
    int f[N][M];
    int main()
    {
        int t; 
        cin>>t;
        int n,m;
        cin>>n;
        for(int i=1;i<=n;i++) //第一个序列
        {
            cin>>a[i];
        }
        cin>>m;
        for(int i=1;i<=m;i++) //第二个序列
        {
            cin>>b[i];
        }
        for(int i=1;i<=n;i++) //枚举第一个序列的第i个字符
        {
            for(int j=1;j<=m;j++) //枚举第二个序列的第j个字符
            {
                f[i][j]=max(f[i-1][j],f[i][j-1]); //不选第i个和不选第j个
                if(a[i]==b[j]) //相等
                {
                    f[i][j]=max(f[i][j],f[i][j-1]+1);
                    //      已有的最大值,从i和j-1过来
                }
            }
        }
        cout<<f[n][m];
        return 0;
    }
    
    • 1

    Information

    ID
    215
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    # Submissions
    12
    Accepted
    6
    Uploaded By