[HDOJ1261]最少拦截系统

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257

 

dp数组记录某套拦截系统当前可以拦截的高度。

贪心可过,每读入一个导弹高度,和之前能打到的最低的比较,如果导弹比之前的高,那就要增加一套拦截系统,并且将此导弹的高度记录下来。如果比之前的低,那么让最近的比它高的那套拦截系统拦截它,并且更改那一套的dp值。

 

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <iostream>
 6 #include <cmath>
 7 #include <queue>
 8 #include <map>
 9 #include <set>
10 #include <stack>
11 #include <list>
12 #include <vector>
13 
14 using namespace std;
15 
16 const int maxn = 30010;
17 int n;
18 int tmp;
19 int dp[maxn];
20 
21 int main() {
22     // freopen("in", "r", stdin);
23     while(~scanf("%d", &n)) {
24         int cnt = 1;
25         int flag = 0;
26         while(n--) {
27             scanf("%d", &tmp);
28             if(!flag) {
29                 dp[0] = tmp;
30                 flag = 1;
31             }
32             int i;
33             for(i = 0; i < cnt; i++) {
34                 if(tmp <= dp[i]) {
35                     dp[i] = tmp;
36                     break;
37                 }
38             }
39             if(i == cnt) {
40                 dp[cnt++] = tmp;
41             }
42         }
43         printf("%d\n", cnt);
44     }
45 }

 

posted @ 2015-09-02 22:18  Kirai  阅读(133)  评论(1编辑  收藏  举报