最少拦截系统
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257
DP
当遇到一个逆序的数字(比如3,2,9,1中的9),必定要在设置一台防御系统,否则只需要用之前设置的防御高度与当前的导弹最相近的防御系统抵御即可。
代码如下:
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <algorithm> 5 #define N 1000005 6 using namespace std; 7 int n,i,t,a[N]; 8 int main(void){ 9 while(~scanf("%d",&n)){ 10 int k=0; 11 while(n--){ 12 scanf("%d",&t); 13 i=lower_bound(a,a+k,t)-a; 14 a[i]=t; 15 if(i==k)k++; 16 } 17 printf("%d ",k); 18 } 19 }