入侵和反击

时间限制: 1 Sec  内存限制: 128 MB

题目描述

A国部署的反导系统遇到了一个致命BUG,那就是每一次发射的拦截导弹的飞行高度都将只能小于等于上一枚导弹的飞行高度,第一次发射的拦截导弹的飞行高度可以看作是足够大。对于A国,这是一件很严重的问题,这意味着A国的防空系统面临空前危机。

通过对A国的军事部门计算机的入侵,A国还不知道敌对国B国刚才已经发现了这项BUG。更不知道,在这项BUG的报告书上交到B国空军司令部那一刻,三分钟后B国的全体高级空军军官已经在作战室讨论作战方案。

如果战争真的开始,B国将依次派出n架战斗机A国将依次发射拦截导弹,这n架飞机的飞行高度分别是h1h2h3.....hn。B国将要充分利用这项漏洞,考虑到这么一种情况,假设只要A国的导弹的飞行高度大于等于B国飞机就能百分之百地锁定并击落,那么B国,最少将会有几架不被击落飞机?

输入

第一行为T,表示有T组输入数据(T<200)。

每组数据第一行是n代表有n架飞机(1=<n<=20 000)。

接下来一行有n个数,分别代表n架飞机的飞行高度,飞机飞行高度maxh为(1<=maxh<=50 000)。

输出

对于每组测试数据,在每行中输出一个数。表示B国最少将会有几架未被击落飞机。

样例输入

2
1
1000
6
340 260 101 405 278 89

样例输出

0

2

分析:

动态规划基础题目,求一个最长上升子序列,总序列长度减去上升子序列长度,即为答案

解法1:时间复杂度:O(n^2)

#include<stdio.h>
#define MAXN 20010
int dp[MAXN], a[MAXN];
int main()
{int n, i, j, t, temp;int max, min;scanf("%d", &t);while (t--) {scanf("%d", &n);for (i = 1; i <= n; i++)scanf("%d", &a[i]);dp[1] = 1;//  max=5000;for (i = 2; i <= n; i++){temp = 0;for (j = 1; j < i; j++)if (a[i] <= a[j])if (temp < dp[j])temp = dp[j];dp[i] = temp + 1;}max = 0;for (i = 1; i <= n; i++)if (max < dp[i])max = dp[i];min = n - max;printf("%d\n", min);}return 0;
}

解法2:时间复杂度O(n^2)

//lower_bound返回区间[first, last)内第一个不小于(即大于或等于)给定值的元素指针
//upper_bound返回区间[first, last)内第一个大于给定值的元素指针
#include<stdio.h>
#include<algorithm>
#include<cstring>
using namespace std;
int num[20100],lis[20100];
int main()
{int n,len,T;scanf("%d",&T);while(T--){scanf("%d",&n);len = 0;memset(lis,0,sizeof(lis));for(int i=n-1;i>=0;i--)
//如果i是从1开始,在lower_bound中的到的位置会返回到0,
//这样就不可以把lis[1]的位置替换掉,从而WA。scanf("%d",&num[i]);lis[0] = num[0];for(int i=1;i<n;i++){if(num[i] >= lis[len])
//如果num比lis[len]选择的终点大,则可以放入lis,即新的终点。lis[++len] = num[i];else{int pos = upper_bound(lis,lis+len,num[i]) - lis;
//注意lower_bound 的用法,lower_bound返回的是一个地址lis[pos] = num[i];}}printf("%d\n",n-len-1);//len是从0开始的,所以要加上1。}
}

入侵和反击 动态规划相关推荐

  1. SUST OJ 1674: 入侵与反击(最长不下降子序列)

    1674: 入侵与反击 时间限制: 1 Sec  内存限制: 128 MB 提交: 229  解决: 28 [提交][状态][讨论版] 题目描述 A国部署的反导系统遇到了一个致命BUG,那就是每一次发 ...

  2. 入侵检测(IDS)技术知识小结

    入侵检测(IDS)技术 入侵检测:对企图入侵.正在进行的入侵或已经发生的入侵进行识别的过程. 入侵检测系统:完成入侵检测功能的软件.硬件及其组合,是一种能够通过分析系统安全相关数据来检测入侵活动的系统 ...

  3. 入侵检测(IDS)技术

    入侵检测(IDS)技术 入侵检测:对企图入侵.正在进行的入侵或已经发生的入侵进行识别的过程. 入侵检测系统:完成入侵检测功能的软件.硬件及其组合,是一种能够通过分析系统安全相关数据来检测入侵活动的系统 ...

  4. 刺激战场测试fps软件,绝地求生刺激战场怎么查看帧率?查看帧率方法一览

    绝地求生刺激战场是最近很火的一个吃鸡手游,这个游戏中帧率越高玩起来越顺,很多小伙伴都想看看自己的帧率,大家都在问这个游戏是怎么查看帧率的?小编就为大家带来了查看帧率方法一览! 刺激战场查看FPS方法分 ...

  5. 服务器被入侵了?反手溯源出入侵者画像【网络安全】

    前序 手机上发来服务器被入侵的消息,这令人感到一脸懵,这个服务器也不是啥重要东西,上面啥也没有怎么还会被搞?被人搞了那也不能示弱了, 排查后门 开机进行分析.一登陆进服务器就想起来了之前做测试的时候直 ...

  6. 安全防御之入侵检测篇

    目录 1.什么是IDS? 2.IDS和防火墙有什么不同?3.IDS的工作原理? 4.IDS的主要检测方法有哪些?请详细说明 5.IDS的部署方式有哪些? 6.IDS的签名是什么意思?签名过滤器有什么用 ...

  7. 【ECNU OJ 3373】 骑士游戏 最短路径+动态规划

    Problem 3373 骑士游戏 长期的宅男生活中,JYY 又挖掘出了一款 RPG 游戏.在这个游戏中 JYY 会扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. 在这个游戏中,JYY 一共 ...

  8. 机器人受人类虐待后奋起反击?这段视频刷爆网络

    机器人受人类虐待后奋起反击?这段视频刷爆网络 机器人受人类虐待后奋起反击?这段视频刷爆网络 西安购房新政出台 新落户者或非西安户籍限购 原标题:"波士顿动力机器人"备受人类虐待后奋 ...

  9. 黑客入侵 应用程序无法启动_被黑客入侵如何启动我的网络安全职业

    黑客入侵 应用程序无法启动 I've always been fascinated by how other Cybersecurity professionals ended up in their ...

最新文章

  1. bzoj 2563 贪心 思想
  2. java mybatis 代码生成器_Java MyBatis-Plus 代码生成器
  3. 看网络电子围栏如何做好周界安防
  4. Windows误关闭资源管理器重启的办法
  5. linux eclipse gtk,Ubuntu+Eclipse下开发GTK+应用程序
  6. 直播丨Oracle 12cR2 ADG LGWR Library Cache案例分享
  7. vlc学习计划(2)---二进制包安装及使用
  8. 如何将java项目部署到Linux服务器上
  9. 开源的仓库管理软件——Sonatype Nexus
  10. 手机WAPI功能检测常见问题分析(系列连载一):证书安装
  11. 华为机试:VLAN资源池
  12. 80psi等于多少kpa_【图】关于胎压的换算psi、bar,kpa
  13. 未来已来,云上安全SaaS化势不可挡
  14. excel中时间加分钟运算公式
  15. 基于 Python 爬虫+简单数据分析的课程设计(附PPT)
  16. KStar ----BPM应用框架,K2 的新星
  17. 基于 STM32F103C8T6 对音频数据的 Flash 读取与 DAC 播放
  18. 定义采购申请凭证类型
  19. 《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为 a的木棍,从第二天开始,每天都要将这根木棍锯掉一半
  20. PaddleDetection复现笔记

热门文章

  1. SQL中的撤销索引、表以及数据库
  2. C# Httpclient编程
  3. Python成长笔记 - 基础篇 (六)python模块
  4. 贡献一个连jquery都觉的大的时候可以用的 js库
  5. 让IE6支持图片半透明
  6. 统计信号处理_声学前端:深度学习算法和传统信号处理方法各有千秋
  7. 线性代数知识点总结_考研数学线性代数部分怎样复习
  8. html 自定义标签解析,Java解析Html自定义标签的属性
  9. php和html的怎么结合,php和html怎么结合,我要做seesion验证啊。。。
  10. java 今天 昨天_js获取当前时间(昨天、今天、明天)