题目描述
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,由于该系统还在试用阶段。所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度不大于30000的正整数)。计算这套系统最多能拦截多少导弹。
输入
N颗依次飞来的导弹高度,(导弹个数<=1000)。
输出
一套系统最多拦截的导弹数,并依次打印输出被拦截导弹的高度。
注意:若有多种拦截导弹的方案,则应输出导弹编号尽量靠前的那种方案。
样例输入
300 250 275 252 200 138 245
样例输出
5 300 275 252 200 138
求最长不下降序列,为了最后的输出,我们另外设一个状态,用来存此数前面拦截导弹的序号,由于不确定第一个拦截的子弹,所以从方案里的最大序号开始根据状态往前搜索,并储存,将储存的数组逆序输出就OK啦!(不清楚的见代码,也可以评论)
#include <bits/stdc++.h>
using namespace std;
int n = 1, a[1001], b[1001][2], ans, t, k[1001];
main()
{
while (cin >> a[n])
n+&