DP 最长公共上升子序列(板子)

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    int t;
    int m;
    int n;
    int maxx;
    int temp;
    int a[505];
    int b[505];
    int cnt[505][505];
    cin>>t;
    while(t--)
    {
        temp=-1000;
        for(int i=0;i<505;i++)
        {
            a[i] = 0;
            b[i] = 0;
        }
        for(int i=0;i<505;i++)
        {
            for(int j=0;j<505;j++)
            {
                cnt[i][j] = 0;
            }
        }
        cin>>m;
        for(int i=1;i<=m;i++)
        {
            cin>>a[i];
        }
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>b[i];
        }
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if((a[i]==b[j])&&(a[i]>=temp))
                {
                    cnt[i][j] = cnt[i-1][j-1]+1;
                    temp = a[i];
        //            cout<<cnt[i][j]<<endl;
                }
                else
                {
                    if(cnt[i-1][j]>cnt[i][j-1])cnt[i][j] = cnt[i-1][j];
                    else cnt[i][j] = cnt[i][j-1];
                }
            }
        }
        cout<<cnt[m][n]<<endl;
        if(t)cout<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41243063/article/details/81382349