PAT (Advanced Level) 1045. Favorite Color Stripe (30)

最长公共子序列变形。

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<map>
#include<queue>
#include<string>
#include<vector>
using namespace std;

int n,M,L;
int a[300],b[10030];
int dp[300][10030];

int MAX(int a,int b,int c)
{
    return max(a,max(b,c));
}

int main()
{
    scanf("%d",&n);
    scanf("%d",&M); for(int i=1;i<=M;i++) scanf("%d",&a[i]);
    scanf("%d",&L); for(int i=1;i<=L;i++) scanf("%d",&b[i]);
    memset(dp,0,sizeof dp);
    for(int i=1;i<=M;i++)
    {
        for(int j=1;j<=L;j++)
        {
            if(a[i]==b[j]) dp[i][j]=MAX(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1;
            else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
        }
    }
    printf("%d
",dp[M][L]);
    return 0;
}
原文地址:https://www.cnblogs.com/zufezzt/p/5526926.html