hdu4512 LCIS

来源:互联网 发布:大数据平台性能指标 编辑:程序博客网 时间:2024/06/06 08:57

一开始想到最长公共上升子序列了,不过没太想清楚,看了别人的解题思路才恍然大悟。

先将数组逆序存储;

1.以(a[1~i],b[1~n-i])(偶数个)的LCIS;

2.以i位置为中心的(a[1~i-1],b[1~n-i])的LCIS;


ACcode:

#include<cstdio>#include<cstring>const int ns=222;const int INF=10000000;int n,ans;int h[ns],w[ns],f[ns];int Max(int a1,int a2){    return a1>a2?a1:a2;}int LCIS(int la,int lb){    int maxs;    memset(f,0,sizeof(f));    for (int i=1;i<=la;i++)    {        maxs=0;        for (int j=1;j<=lb;j++)        {            if (h[i]>w[j]&&maxs<f[j]) maxs=f[j];            if (h[i]==w[j]) f[j]=maxs+1;        }    }    for (int j=1;j<=lb;j++) f[0]=Max(f[0],f[j]);    return 2*f[0];}int main(){    int T;    scanf("%d",&T);    while (T--)    {        ans=0;        scanf("%d",&n);        for (int i=1; i<=n; i++)        {            scanf("%d",&h[i]);            w[n-i+1]=h[i];        }        for (int i=1;i<n;i++)        {            ans=Max(LCIS(i,n-i),ans);            ans=Max(LCIS(i,n-i+1)-1,ans);        }        printf("%d\n",ans);    }    return 0;}


原创粉丝点击