UVA - 12002(特殊的LIS和LDS组合)

来源:互联网 发布:购物车程序java 编辑:程序博客网 时间:2024/05/21 15:48
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;const int maxn = 550;int ind[maxn][2],ded[maxn][2],a[maxn],yu[maxn],pre[maxn];int n;int main(){   while(scanf("%d",&n)==1 && n){     for(int i=1;i<=n;i++){        scanf("%d",&a[i]);     }     for(int i=n;i>=1;i--){       ind[i][0]=ind[i][1]=1;       for(int j=i+1;j<=n;j++){          if(a[i] < a[j]){             ind[i][0] = max(ind[i][0],ind[j][1]+1);             ind[i][1] = max(ind[i][1],ind[j][1]+1);          }          else if(a[i]==a[j]){             ind[i][1] = max(ind[i][1],ind[j][1]+1);          }     }     }     for(int i=n;i>=1;i--){       ded[i][0]=ded[i][1]=1;       for(int j=i+1;j<=n;j++){          if(a[i] > a[j]){             ded[i][0] = max(ded[i][0],ded[j][1]+1);             ded[i][1] = max(ded[i][1],ded[j][1]+1);          }          else if(a[i]==a[j]){             ded[i][1] = max(ded[i][1],ded[j][1]+1);          }     }     }     int res = 0;     for(int i=1;i<=n;i++){        res = max(res,ind[i][1]+ded[i][0]-1);        res = max(res,ind[i][0]+ded[i][1]-1);     }     printf("%d\n",res);   }}

0 0
原创粉丝点击