题解:
首先要读懂题意:一个导弹拦截系统不一定要连续发射;
按先后顺序处理发射来的导弹,
1.用a[i]来保存第i个拦截系统当前的发射高度(目前需m个拦截系统);
2.对于发射来的导弹,其高度若比1~m中的任一a[i]小,则更新a[i],即
第i个拦截系统当前的发射高度,若其高度比所有的a[i]都大,则需一个新的
拦截系统a[m+1],保存发射来的导弹高度。
DP也能做:不过,我不在行@@
#include<stdio.h> #include<string.h> #define N 50500 int a[N]; int main() { int n,x; int i,j,k; while(scanf("%d",&n)!=EOF&&n) { memset(a,0,sizeof(a)); int m=0; for(i=0;i<n;i++) { scanf("%d",&x); for(j=0;j<=m;j++) if(x<=a[j]) { a[j]=x; break; } if(j==m+1) { m++; a[m]=x; } } printf("%d\n",m); } }