UVa 231

  题目大意:一种拦截导弹能拦截多枚导弹,但是它在每次拦截后高度不会再升高,给出导弹的序列,问最多能拦截多少枚导弹?

  最长递减子序列问题。

 1 #include <cstdio>
 2 #include <vector>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 vector<int> m, lds;
 7 
 8 int main()
 9 {
10 #ifdef LOCAL
11     freopen("in", "r", stdin);
12 #endif
13     int x, kase = 0;
14     while (scanf("%d", &x) != EOF && x != -1)
15     {
16         kase++;
17         m.clear();
18         m.push_back(x);
19         while (scanf("%d", &x) && x != -1)
20             m.push_back(x);
21         lds.clear();
22         lds.resize(m.size(), 1);
23         for (int i = 1; i < m.size(); i++)
24         {
25             for (int j = 0; j < i; j++)
26                 if (m[i] < m[j] && lds[j]+1 > lds[i])
27                     lds[i] = lds[j] + 1;
28         }
29         int ans = 1;
30         for (int i = 0; i < lds.size(); i++)
31             ans = max(ans, lds[i]);
32         if (kase > 1)  printf("
");
33         printf("Test #%d:
  maximum possible interceptions: %d
", kase, ans);
34     }
35     return 0;
36 }
View Code
原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3308148.html