HDU1423----Greatest Common Increasing Subsequence

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#include<queue>
using namespace std;
#define maxn 1000
int a[maxn];
int b[maxn];
int f[maxn];
int n,m;
int LCIS()
{
    int i,j,k;
    memset(f,0,sizeof f);
    for(int i=0;i<n;i++)
    {
        k=0;
        for(j=0;j<m;j++)
        {
            if(a[i]==b[j])
            {
                if(f[j]<f[k]+1)
                    f[j]=f[k]+1;//更新
            }
            if(a[i]>b[j]){//0到j-1中,對於小於a[i]的,保存f值的最優解
                if(f[j]>f[k])
                    k=j;
            }
        }

    }
    int ma=-1;
    for(int i=0;i<m;i++)
        ma=max(ma,f[i]);
    return ma;

}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        memset(f,0,sizeof f);
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);

        scanf("%d",&m);
        for(int i=0;i<m;i++)
            scanf("%d",&b[i]);

        printf("%d\n",LCIS());
        if(t)
            printf("\n");
    }
    return 0;
}
慢慢領悟。
發佈了198 篇原創文章 · 獲贊 14 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章