码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 5087 Revenge of LIS II (DP)

时间:2014-11-05 21:06:27      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   for   sp   数据   div   on   

题意:

N个数,求第二长上升子序列的长度。

 

数据范围:

1. 1 <= T <= 100
2. 2 <= N <= 1000
3. 1 <= Ai <= 1 000 000 000

 

思路:

数据给的很暧昧,用n^2的算法可以过。故用n^2算法。只要在DP过程中记录得到f[i]是否只有一种方法即可。详看代码。

 

代码:

int T,n;
int a[1005],f[1005];
bool NOTalone[1005];

int main(){
    //freopen("test.in","r", stdin);
    cin>>T;
    while(T--){
        scanf("%d",&n);
        rep(i,1,n) scanf("%d",&a[i]);
        rep(i,1,n) f[i]=1;
        mem(NOTalone,false);
        rep(i,2,n){
            rep(j,1,i-1) if(a[i]>a[j]){
                if(f[j]+1>f[i]){
                    f[i]=f[j]+1;
                    NOTalone[i] = NOTalone[j];
                }
                else if(f[j]+1==f[i]){
                    NOTalone[i]=true;
                }
            }
        }

        int t=f[1];  rep(i,2,n) t=max(t,f[i]);
        bool NOT_ALONE=false;
        int c=0;
        rep(i,1,n) if(t==f[i]) ++c,NOT_ALONE|=NOTalone[i];
        if(c>1) NOT_ALONE=true;
        if(!NOT_ALONE)
            cout<<t-1<<endl;
        else
            cout<<t<<endl;
    }
    //fclose(stdin);
}

 

hdu 5087 Revenge of LIS II (DP)

标签:style   blog   color   os   for   sp   数据   div   on   

原文地址:http://www.cnblogs.com/fish7/p/4077206.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!