HDU 1257 最少拦截系统

思路:dp[i]代表第i个拦截系统最后拦截的高度及最低值。贪心判断接下来那个导弹的高度与离它最近的之前所有拦截系统中的最近,不符合则开一个系统。

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 #include<cstdlib>
 5 #include<cstdio>
 6 #include<set>
 7 #include<map>
 8 #include<vector>
 9 #include<cstring>
10 #include<stack>
11 #include<cmath>
12 #include<queue>
13 #include <bits/stdc++.h>
14 using namespace std;
15 #define INF 0x3f3f3f3f
16 #define ll long long
17 #define clc(a,b) memset(a,b,sizeof(a))
18 const int maxn=4010;
19 
20 
21 int main()
22 {
23     int n;
24     int dp[maxn];
25     while(~scanf("%d",&n))
26     {
27         clc(dp,0);
28         int m=0;
29         int x;
30         scanf("%d",&x);
31         dp[0]=x;
32         int j;
33         m++;
34         for(int i=1; i<n; i++)
35         {
36             scanf("%d",&x);
37             int flag=false;
38             for(j=0; j<m; j++)
39             {
40                 if(x<=dp[j])
41                 {
42                     dp[j]=x;
43                     flag=true;
44                     break;
45                 }
46             }
47             if(!flag)
48                 dp[m++]=x;
49         }
50         printf("%d\n",m);
51     }
52     return 0;
53 }
View Code

 

posted @ 2016-02-04 14:52  yyblues  阅读(171)  评论(0编辑  收藏  举报