网站备案icp,文化传媒有限公司,自己注册了个域名想做一个网站,西安推广网络排行题目
某国为了防御敌国的导弹袭击#xff0c;发展出一种导弹拦截系统。
但是这种导弹拦截系统有一个缺陷#xff1a;虽然它的第一发炮弹能够到达任意的高度#xff0c;但是以后每一发炮弹都不能高于前一发的高度。
某天#xff0c;雷达捕捉到敌国的导弹来袭。
由于该系…题目
某国为了防御敌国的导弹袭击发展出一种导弹拦截系统。
但是这种导弹拦截系统有一个缺陷虽然它的第一发炮弹能够到达任意的高度但是以后每一发炮弹都不能高于前一发的高度。
某天雷达捕捉到敌国的导弹来袭。
由于该系统还在试用阶段所以只有一套系统因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度雷达给出的高度数据是不大于30000的正整数导弹数不超过1000计算这套系统最多能拦截多少导弹如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入格式
共一行输入导弹依次飞来的高度。
输出格式
第一行包含一个整数表示最多能拦截的导弹数。
第二行包含一个整数表示要拦截所有导弹最少要配备的系统数。
数据范围
雷达给出的高度数据是不大于 30000 的正整数导弹数不超过 1000。
输入样例
389 207 155 300 299 170 158 65输出样例
6
2
思路
求一台设备拦截的最大数量求最大非上升子序列。
求需要多少设备才能全部拦截
开一个数组p[]初始状态为空cnt代表设备数p[i]代表第i台设备所能拦截的最大高度。
当我们遇到一枚导弹时我们有两个选择
1、使用现有设备进行拦截
2、新增加一台设备进行拦截
如果中间状态如下可以确保q[]数组是递增的因为无法拦截的导弹会放入当前最后的一个位置 当高度为2的导弹来袭的时候优先使用p[0] 3进行拦截然后p[0] 2;
【257】
当高度为5的导弹来袭的时候优先使用p[1] 5进行拦截然后p[1] 5;
【257】
当高度为8的导弹来袭的时候现有设备无法拦截新增加一个设备p[3]令p[3] 8;
【2578】
当高度为4的导弹来袭的时候优先使用p[1] 5拦截p[1] 4;
【2478】
代码
#includebits/stdc.h
using namespace std;
const int N 1e3 10;
int n;
int h[N],f[N],q[N];int main()
{string s;getline(cin,s);stringstream ssin(s);while(ssin h[n]) n ;int res 0,cnt 0;for(int i 0; i n; i ){f[i] 1;for(int j 0; j i; j ){if(h[i] h[j]) f[i] max(f[i],f[j] 1);}res max(res,f[i]);int k 0;while(k cnt h[i] q[k]) k ;if(k cnt){q[cnt] h[i];cnt ;}else{q[k] h[i];}}cout res endl cnt endl;return 0;
}
题目来自1010. 拦截导弹 - AcWing题库