HDU 1423 Greatest Common Increasing Subsequence ——动态规划

好久以前的坑了。

最长公共上升子序列。

没什么好说的,自己太菜了

#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define maxn 505
#define mp make_pair

int t,n,m,a[maxn],b[maxn],f[maxn][maxn],ans;

int main()
{
    scanf("%d",&t);
    while (t--)
    {
        ans=0;
        scanf("%d",&n);F(i,1,n)scanf("%d",&a[i]);
        scanf("%d",&m);F(i,1,m)scanf("%d",&b[i]);
        memset(f,0,sizeof f);
        F(i,1,n)
        {
            int tmp=0;
            for (int j=1;j<=m;++j)
            {
                f[i][j]=f[i-1][j];
                if (b[j]<a[i]) tmp=max(f[i][j],tmp);
                if (a[i]==b[j]) f[i][j]=max(f[i][j],tmp+1);
            }
        }
        F(i,1,m) ans=max(ans,f[n][i]);
        printf("%d\n",ans);
        if (t) printf("\n");
    }
}

  

posted @ 2017-03-31 09:23  SfailSth  阅读(124)  评论(0编辑  收藏  举报