1003. 【东莞市选2007】拦截导弹 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Detailed Limits Goto ProblemSet Description 在很久以前,A国发明一套导弹拦截系统来防御敌国发射的导弹。这套系统能通过发射一枚导弹来拦截敌人的多枚导弹,但该导弹每次只能按距离由近到远拦截比它当前高度低(或等于当前高度)的导弹。 最近,有学者发现这套系统并不够强大,所以他们发明了另一套导弹拦截系统。同样的该系统也是发射一枚导弹拦截敌人的多枚导弹,并且也是由距离近的导弹向距离远的导弹进行拦截。当拦截导弹发射后,第一次它可选择任一枚导弹进行拦截,然后它可拦截比当前导弹距离远、高度低的导弹,接着它可拦截比当前导弹距离远、高度高的导弹……就是说,该拦截导弹在奇数次将拦截比前一枚导弹距离远、高度高的导弹,在偶数次将拦截比前一枚导弹距离远、高度低的导弹。 现在,有近到远给出了敌国发射过来的导弹的高度,请你计算出一枚该拦截导弹最多能拦截到多少枚导弹。 Input 输入包含多组数据。对于每组数据,第一行是一个整数N,(1<=N<=1000),表示敌国发射的导弹数。接下来一行由近及远的给出N个整数h(0<=h<=10^9),表示导弹的高度。输入数据以N=0结束。 Output 对于每组数据,输出一个整数,为一枚拦截导弹最多能拦截的导弹数量。 Sample Input 4 5 3 2 4 3 1 1 1 0 Sample Output 3 1 Data Constraint uses math; var a,b,c,i,j:longint; f,v:array[1..1000]of longint; begin while not eof do begin readln(a); if a=0 then halt; fillchar(f,sizeof(f),0); for b:=1 to a do read(v[b]); for i:=1 to a do begin f[i]:=1; for j:=1 to a do begin if ((f[j] mod 2=1)and(v[j]>v[i])) or((f[j] mod 2=0)and(v[j]<v[i])) then f[i]:=max(f[i],f[j]+1); end; end; writeln(f[a]); end; end.