蓝桥杯试题 算法训练 拦截导弹

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。

输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入格式
  一行,为导弹依次飞来的高度
输出格式
  两行,分别是最多能拦截的导弹数与要拦截所有导弹最少要配备的系统数
样例输入
389 207 155 300 299 170 158 65
样例输出
6
2

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
static int maxlength=0;
	public static void main(String[] args) throws IOException{
	BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
    String s=bf.readLine();
    String arr[]=s.split(" ");
    int len=0;
    for (int i = 0; i < arr.length; i++) {
    	count(arr,i,len+1);  //本质找最长的顺序串
	}
    int sys[][]=new int[arr.length][2];  //第一列储存系统高度,第二列储存拦截导弹个数
    sys[0][0]=Integer.parseInt(arr[0]);
    sys[0][1]++;
    int left=0;
    int right=1;  //右指针指向空闲拦截系统
    for (int i =1; i < arr.length; i++) {
                while(left<=right) { //依次扫描从左到右
	              if(left!=right) {       
                	   if(Integer.parseInt(arr[i])>sys[left][0]) {
	                	   left++;
	                   }else {
	                	   sys[left][1]++;
	       				   sys[left][0]=Integer.parseInt(arr[i]);
	       				   left=0;  //确保下次从头开始
	       				   break;
	                   }
	              }else {
	            	   sys[right][0]=Integer.parseInt(arr[i]);
	            	   sys[right][1]++;
      				   right++;
      				   left=0;  //同上
      				   break;
	              }
                }
	    		continue;
	}
    System.out.println(maxlength);
    System.out.println(right);
}
	private static void count(String[] arr, int i, int len) {
	    	if(len>maxlength) {
	    		maxlength=len;
	    	}

		for (int k = i+1; k <=arr.length-1; k++) {
			if(Integer.parseInt(arr[k])<=Integer.parseInt(arr[i])) {
				count(arr,k,len+1);
	            continue;
			}else {
				continue;
			}
	    }
	}
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CZDXWX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值