• UVa 11456


      题目大意:给一个车辆到达车站的序列(按时间先后),可以对车辆进行以下处理:插在队首、插在队尾或者拒绝进站。车站内的车辆必须按照重量大小从大到小排列,问车站内最多能有多少辆车辆?

      假设车i是第一个进站,那么在i后面的车辆如果比i车重,可以插在i的前面,如果比i车轻,可以插在i的后面。这就变成了求以i为起点的最大递增子序列和最大递减子序列了,i首先进站的最大长度为LIS(i)+LDS(i)-1,找出其中的最大值就可以了。

     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 #define MAXN 2010
     5 
     6 int a[MAXN], lis[MAXN], lds[MAXN];
     7 
     8 int main()
     9 {
    10 #ifdef LOCAL
    11     freopen("in", "r", stdin);
    12 #endif
    13     int T;
    14     scanf("%d", &T);
    15     while (T--)
    16     {
    17         int n;
    18         scanf("%d", &n);
    19         for (int i = 0; i < n; i++)
    20             scanf("%d", &a[i]);
    21         for (int i  = n-1; i >= 0; i--)
    22         {
    23             lis[i] = lds[i] = 1;
    24             for (int j = i+1; j < n; j++)
    25             {
    26                 if (a[i] < a[j])  lis[i] = max(lis[i], lis[j]+1);
    27                 if (a[i] > a[j])  lds[i] = max(lds[i], lds[j]+1);
    28             }
    29         }
    30         int ans = 0;
    31         for (int i = 0; i < n; i++)
    32             ans = max(ans, lis[i]+lds[i]-1);
    33         printf("%d
    ", ans);
    34     }
    35     return 0;
    36 }
    View Code

      做的有点随便了,大概想了一下就开始写了,最初LIS(i)和LDS(i)保存的是以i为终点的最大XX子序列,根本就没想清楚,完全凭感觉了...后来改了还是WA了,然后就觉得是n可以等于0的问题,没好好看题-_-|| ,这个WA了4次才过,无语啊...

  • 相关阅读:
    Qt的.pro文件
    AI_八数码
    安装 MINGW GCC 4.4.0
    VC中应用Excel
    八数码问题_启发搜索
    【收集】【收藏】【转帖】game development resouce
    QT小记之在VS2005中使用QT
    [转文]VS2008 安装 Boost 1.43.0
    搬家到博客园了
    转 暴雪总裁总结游戏十条经验
  • 原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3308318.html
Copyright © 2020-2023  润新知