问题描述

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

输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

输入格式

  一行,为导弹依次飞来的高度

输出格式

  两行,分别是最多能拦截的导弹数与要拦截所有导弹最少要配备的系统数

样例输入

389 207 155 300 299 170 158 65

样例输出

6
2

【分析】第一个问题,最多能拦截的导弹数和最长不下降子序列是相似的。第二个问题,最少要配备的系统数需要用贪心算法来求解;对于最多能拦截的导弹数这个问题,每一枚飞来的导弹被系统拦截,那这一枚导弹后面比当前飞来的导弹高度低的导弹也可以被这套系统拦截,用一个dp数组来保存一套系统最多可以拦截多少导弹数;对于第二个问题,后面飞来的每一枚导弹,都用前面与它高度差最小的那套系统去拦截

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class Main {public static void main(String[] args) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));String[] missile = reader.readLine().split(" ");reader.close();int[] high = new int[missile.length];for (int i = 0; i < high.length; i++) {high[i] = Integer.parseInt(missile[i]);}System.out.println(getMaxIntercept(high));System.out.println(getNumberOfIntercepter(high));}private static int getMaxIntercept(int[] high) {int[] dp = new int[high.length];int max = 0;for (int i = 0; i < high.length; i++) {for (int j = i + 1; j < high.length; j++) {if (high[j] <= high[i]) {dp[j] = Integer.max(dp[j], dp[i] + 1);max = Integer.max(max, dp[j]);}}}return max + 1;}private static int getNumberOfIntercepter(int[] high) {int numberOfIntercepter = 0;boolean[] isIntercept = new boolean[high.length];for (int i = 0; i < high.length; i++) {int midHighDifference = getMinHighDifference(high, i, isIntercept);if (midHighDifference == -1) {numberOfIntercepter++;} else {isIntercept[midHighDifference] = true;}}return numberOfIntercepter;}private static int getMinHighDifference(int[] high, int pos, boolean[] isIntercept) {int minHighDifferenceIndex = -1;for (int i = 0; i < pos; i++) {if (isIntercept[i] == false && high[i] >= high[pos]) {if (minHighDifferenceIndex == -1 || high[i] < high[minHighDifferenceIndex]) {minHighDifferenceIndex = i;}}}return minHighDifferenceIndex;}
}

蓝桥杯 ALGO-13 算法训练 拦截导弹 Java版相关推荐

  1. 蓝桥杯:试题 算法训练 Remember the A La Mode

    蓝桥杯:试题 算法训练 Remember the A La Mode 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Hugh Samston经营着一个为今年的ICPC世界总决赛的参 ...

  2. 矩阵乘法 算法训练 试题_蓝桥杯习题集_ 算法训练 矩阵乘法

    原文: 算法训练 矩阵乘法 时间限制:1.0s   内存限制:512.0MB 问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s, ...

  3. [Java] 蓝桥杯ALGO-13 算法训练 拦截导弹

    问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  4. 蓝桥杯算法训练 拦截导弹(动态规划 C语言)

    问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  5. 蓝桥杯-黑色星期五(算法训练)

    题目描述: 有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是"诸事不宜".请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是1 ...

  6. 蓝桥杯练习系统算法训练习题加答案java版本

    附上百度文库的链接:http://wenku.baidu.com/view/afb78d36b42acfc789eb172ded630b1c59ee9bf7 转载于:https://www.cnblo ...

  7. java蓝桥杯的题_Java蓝桥杯试题集——算法训练ALGO-116——最大的算式

    题目要求 解题思路 动态规划,今天才弄明白QAQ,借鉴了这位大佬的博客,曹磊的博客 写的很好!但是我觉得我的循环方式更容易理解嘿嘿嘿~ 首先建立如下图的数组,行数代表前几位数,列数代表有几个乘号.将第 ...

  8. 蓝桥杯练习系统—算法训练 s01串

    第一部分:题目 问题描述 s01串初始为"0" 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) 输出格式 n次变换后s01串 样例输入 3 样例输出 101 数据 ...

  9. 蓝桥杯 ALGO30 算法训练 入学考试 java版

    问题描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...

最新文章

  1. 解析Erlang日志组件lager的lager_transform模块
  2. Leetcode: Sort List
  3. 强制解包看 Swift 的设计
  4. 写数据到文件注意事项write方法
  5. setup.py安装
  6. 图像处理与计算机视觉资源汇总——论文+代码+教材+视频等等
  7. Nginx下301重定向不带www的域名到带www的域名
  8. CMD各段定义与分配方法指引
  9. 如果把整个因特网都印出来 你认为会怎么样
  10. 1090. Highest Price in Supply Chain (25)
  11. laravel安装prettier,git hook代码格式化工具
  12. android stackview,Android StackView 使用示例
  13. 互联网晚报 | 2月25日 星期五 | 元宇宙概念,热度显著下降;​腾讯正洽谈落地“东数西算”大湾区枢纽韶关数据中心集群...
  14. 165体重_大家觉得作为一个身高165的女生多少斤体重算合适?
  15. python书籍pdf文档密码-Python玩转PDF的各种骚操作
  16. 金蝶kiss对计算机软件的要求,金蝶软件的产品适用范围分析
  17. Python 学习第十七天 jQuery
  18. 华为在 Linux Kernel 5.10 中代码贡献排名第一,中国 AI 足球队夺冠 | 开发者周刊
  19. 叮铃哐当,一大波机器人开始入侵厨房
  20. linux bzip指定名称,Linux命令学习手册-bzip2命令

热门文章

  1. Reporting Services 在WIN7和2008下出现“授予的权限不足,无法执行此操作。 (rsAccessDenied)”的解决办...
  2. Java中ArrayList和Vector的区别
  3. 源码解读Linux的limits.conf文件
  4. K02-01通过简单exe介绍pro基本配置
  5. imagemagick, imagick和magickwand编译安装
  6. 《Python自然语言处理》第二章 习题解答 练习6
  7. 通过反射获取私有方法
  8. 20岁黑客发现苹果核心 web 应用中的严重漏洞,获奖$3.6万
  9. 2021年软件供应链攻击数量激增300%+
  10. 关于原型污染漏洞的完整指南