sd序列

AcWing 187 导弹防御系统

会有一股神秘感。 提交于 2020-01-22 03:31:11
题目描述: 为了对抗附近恶意国家的威胁,R国更新了他们的导弹防御系统。 一套防御系统的导弹拦截高度要么一直 严格单调 上升要么一直 严格单调 下降。 例如,一套系统先后拦截了高度为3和高度为4的两发导弹,那么接下来该系统就只能拦截高度大于4的导弹。 给定即将袭来的一系列导弹的高度,请你求出至少需要多少套防御系统,就可以将它们全部击落。 输入格式 输入包含多组测试用例。 对于每个测试用例,第一行包含整数n,表示来袭导弹数量。 第二行包含n个不同的整数,表示每个导弹的高度。 当输入测试用例n=0时,表示输入终止,且该用例无需处理。 输出格式 对于每个测试用例,输出一个占据一行的整数,表示所需的防御系统数量。 数据范围 1≤n≤50 输入样例: 5 3 5 2 4 1 0 输出样例: 2 样例解释 对于给出样例,最少需要两套防御系统。 一套击落高度为3,4的导弹,另一套击落高度为5,2,1的导弹。 分析: 如果所有导弹防御系统拦截高度都是严格单调上升的,我们采取贪心的思路就是,如果所有系统的最小高度均不小于当前飞来导弹的高度,则新建一套系统;如果存在小于当前导弹高度的系统,则选择其中正确发射导弹高度最高的那个去击落该导弹。转换成LIS就是,如果当前上升子序列中所有序列的末元素均不小于遍历到的元素,则新建一个上升子序列;如果所有上升子序列中存在末元素小于遍历到的元素