最少拦截系统
Problem Description
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.
怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.
Input
输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔)
Output
对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统.
Sample Input
8 389 207 155 300 299 170 158 65
Sample Output
2
题意理解:求最少的 单调递减序列 的个数。
贪心证明:
假设在考虑第i个数ai之前已有L1,L2,…Lm个单调序列,每个序列的最后一个元素为k1,k2,…km。
如果t=max{k1,k2,…,km}>=ai;那么此时一定不需要重新在创建一个单调序列,并且ai一定接在Lj后面,Lj满足kj>=ai并且kj是所有(k1,k2,…km中)大于ai中最小的那个;如果t<ai,那么新创建一个序列Lm+1,km+1=ai。
证明过程:
假设t>=ai是,恰好满足条件的kj为kt。
假设t>=ai,把ai没有接在Lt后面,接在Lx后面。那么一定有kx>kt那么此时有
接在Lt后面:k1,k2,…ai,…kx…km
接在Lx后面:k1,ke,….kt…ai…km
显然接在Lt后面比接在Lx后面更优。
假设t>=ai,此时从新创建一个Lm+1,
a: 创建一个新的Lm+1:k1,k2,…km,ai
b: 没有创建一个新的Lm+1并且接在Lt后面:k1,k2,…ai…km。
a相当于比b多了一个Lt,显然kt<=t的,可以假设在b中创建了一个以无穷大的数结尾的Lm+1,显然b要比a更优。
综上所述,结论成立。