HDU 4512 完美队列I(LCIS)

来源:互联网 发布:我的世界1.7.10java 编辑:程序博客网 时间:2024/06/16 13:20
这题的关键点就是第二位的限制是n-i+1,这样就会把正在匹配的a[i]也算入其中,目的是为了有可能最后的长度是奇数的,那么有一个点是不对称的,所以是自己匹配自己,只要特殊判断一下即可。
////  main.cpp//  Richard////  Created by 邵金杰 on 16/9/27.//  Copyright © 2016年 邵金杰. All rights reserved.//#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=200+10;int a[maxn],b[maxn];int dp[maxn];int main(){    int t;    scanf("%d",&t);    while(t--)    {        int n;        scanf("%d",&n);        for(int i=1;i<=n;i++) scanf("%d",&a[i]);        memcpy(b+1,a+1,sizeof(int)*n);        reverse(b+1,b+1+n);        memset(dp,0,sizeof(dp));        for(int i=1;i<=n;i++){            int k=0;            for(int j=1;j<=n-i+1;j++){                if(a[i]>b[j]&&k<dp[j]) k=dp[j];                if(a[i]==b[j]) {                    if(j!=(n-i+1)) dp[j]=max(dp[j],k+2);                    else dp[j]=max(dp[j],k+1);                }            }        }        int ans=0;        for(int i=1;i<=n;i++) ans=max(ans,dp[i]);        cout<<ans<<endl;    }    return 0;}

0 0
原创粉丝点击