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 }