当前位置:首页 > 题解目录 > 正文内容

【题解】导弹拦截

亿万年的星光3年前 (2022-10-21)题解目录2655

【题目描述】

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹的枚数和导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,每个数据之间至少有一个空格),计算这套系统最多能拦截多少导弹。

【输入描述】

第1行有1个整数n,代表导弹的数量。(n<=1000)
第2行有n个整数,代表导弹的高度。(雷达给出的高度数据是不大于30000的正整数)

【输出描述】

第一行:最多能拦截的导弹数;

第二行:要拦截所有导弹最少要配备的系统数。

【样例输入】

8
389  207  155  300  299  170  158  65

【样例输出】

6


【参考答案一】:只有第一个问题的解

#include<bits/stdc++.h>
using namespace std;
int a[30001],n,c; 

//拦截的当前导弹的编号,拦截的数量,当前的高度 
void dp(int i,int num,int h){
	if(i>n) return;
	//比较出最大值 
	c = max(c,num);
	//向后递归 
	for(int k=i+1;k<=n;k++){
		//如果高度 >= 当前导弹高度,则递归 
		if( h >= a[k]){
			dp(k,num+1,a[k]);
		}else{
			dp(k,num,h);
		}
	}
}

int main(){
   int i;
   cin>>n;
   for(i=1;i<=n;i++){
   		cin>>a[i];
   }
   //每个导弹都可能成为第一枚 
    for(i=1;i<=n;i++){
    	dp(i,1,a[i]);
	}
   cout<<c;
    return 0;
}


【参考答案二】:两个问题的解都有

#include<bits/stdc++.h>
using namespace std;
int a[1001],b[1001],c[1001]; 
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\n",maxx);
    return 0;
}



扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

标签: 动态规划
分享给朋友:

相关文章

【题解】后缀表达式的值

【题解】后缀表达式的值

【题目描述】从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标...

简单算术表达式求值

【题目描述】 两位正整数的简单算术运算(只考虑整数运算),算术运算为:+,加法运算;    -,减法运算;   &nbs...

【题解】取余(2019青岛市程序设计竞赛)

【问题描述】给你n个正整数a1,a2,..,an。求(a1*a2*..an)%10007的值。【输入】第一行,n,表示整数的个数。第二行,n个用空格隔开的正整数。【输出】一个整数,(a1*a2*..a...

奶牛的耳语

【题目描述】在你的养牛场,所有的奶牛都养在一排呈直线的牛栏中。一共有 n头奶牛,其中第 ii头牛在直线上所处的位置可以用一个整数坐标 pi(0<pi<10^8...

公路(road)

公路(road)

【题目描述】小苞准备开着车沿着公路自驾。公路上一共有n个站点,编号为从1 到n。其中站点i与站点i+1 的距离为vi公里。公路上每个站点都可以加油,编号为i 的站点一升油的价格为a...

【算法】走迷宫

【题目描述】一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜...