csu1120 Lics(模板)

来源:互联网 发布:qq管家软件管理 编辑:程序博客网 时间:2024/06/06 04:51

题目链接:点击打开链接

求最长递增公共子序列长度

#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;const int maxn=1e3+10;int n,m,a[maxn],b[maxn],dp[maxn][maxn];//a数组的长度n,b数组的长度为m,都是从1开始int LICS(){    int MAX,i,j;    memset(dp,0,sizeof(dp));    for(i = 1; i<=n; i++)    {        MAX = 0;        for(j = 1; j<=m; j++)        {            dp[i][j] = dp[i-1][j];            if(a[i]>b[j] && MAX<dp[i-1][j])                MAX = dp[i-1][j];            if(a[i]==b[j])                dp[i][j] = MAX+1;        }    }    MAX = 0;    for(i = 1; i<=m; i++)        if(MAX<dp[n][i])            MAX = dp[n][i];    return MAX;}int main(){    int T,i;    scanf("%d",&T);    while(T--)    {        scanf("%d",&n);        for(i=1;i<=n;i++)scanf("%d",&a[i]);        scanf("%d",&m);        for(i=1;i<=m;i++)scanf("%d",&b[i]);        printf("%d\n",LICS());    }}