子序列问题【LIS、LCS、LCIS】

#include<stdio.h> 
#include<algorithm> 
using namespace std;
int n,m,a[1010],b[1010],f[1010][1010];

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;++i) {
        scanf("%d",&a[i]);
    }
    scanf("%d",&m);
    for(int i=1;i<=m;++i) {
        scanf("%d",&b[i]);
    }
    for(int i=1;i<=n;++i) 
    {
        for(int j=1;j<=m;++j) 
        {
            if(a[i]==b[j]) {
                for(int k=0;k<j;++k) {
                    if(a[i]>b[k] && f[i-1][k]+1>f[i][j]) {
                        f[i][j]=f[i-1][k]+1;
                    }
                }
            }
            else f[i][j]=f[i-1][j]; 
        }
    }
    printf("%d",f[n][m]);
    return 0;
}
/*
5
1 4 2 5 -12
4
-12 1 2 4
*/
posted @ 2018-08-06 13:14  qseer  阅读(204)  评论(0编辑  收藏  举报