【题目描述】
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,导弹数不超过1000),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
【输入】
输入导弹依次飞来的高度。
【输出】
第一行:最多能拦截的导弹数;
第二行:要拦截所有导弹最少要配备的系统数。
【输入样例】
389 207 155 300 299 170 158 65
【输出样例】
6 2
#include<stdio.h> #define MAX(x,y) (x>y?x:y) #define M 1001 int a[M], b[M], c[M]; int main() { int n = 0, maxx = 1; while(scanf("%d",&a[n++])!=EOF) for (int i = 0; i < n; i++) { b[i] = 1; for (int j = 0; j < i; j++) { if (a[j] >= a[i] && b[j] + 1 > b[i]) { b[i] = b[j] + 1; } } maxx = MAX(maxx, b[i]); } printf("%d\n", maxx); maxx = 1; for (int i = 0; i < n; i++) { c[i] = 1; for (int j = 0; j < i; j++) { if (a[j]<a[i] && c[j] + 1>c[i]) { c[i] = c[j] + 1; } } maxx = MAX(maxx, c[i]); } printf("%d", maxx); return 0; }
一本通 1260:【例9.4】拦截导弹(Noip1999)
最新推荐文章于 2024-07-02 08:45:00 发布