洛谷P1020 导弹拦截
时间:2019-08-22
本文章向大家介绍洛谷P1020 导弹拦截,主要包括洛谷P1020 导弹拦截使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是\le 50000≤50000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入格式
11行,若干个整数(个数\le 100000≤100000)
输出格式
22行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
题解:求一个最长不上升子序列,和最长不下降子序列最小划分数即Diworth定理
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 6 using namespace std; 7 8 int dp[10000005],h[10000005]; 9 int n,len; 10 11 int main() 12 { 13 while(~scanf("%d",&h[++n])); 14 n--; 15 dp[0]=2147483647; 16 for(int i=1;i<=n;i++) 17 { 18 if(h[i]<=dp[len]) dp[++len]=h[i]; 19 else 20 { 21 int head=1,tail=len; 22 while(head<tail) 23 { 24 int mid=(head+tail)>>1; 25 if(dp[mid]>=h[i]) head=mid+1; 26 else tail=mid; 27 } 28 dp[head]=max(dp[head],h[i]); 29 } 30 } 31 printf("%d\n",len); 32 memset(dp,0,sizeof(dp)); 33 len=0; 34 for(int i=1;i<=n;i++) 35 { 36 if(h[i]>dp[len]) dp[++len]=h[i]; 37 else 38 { 39 int head=1,tail=len; 40 while(head<tail) 41 { 42 int mid=(tail+head)>>1; 43 if(dp[mid]>=h[i]) tail=mid; 44 else head=mid+1; 45 } 46 dp[head]=min(h[i],dp[head]); 47 } 48 } 49 printf("%d",len); 50 return 0; 51 }
原文地址:https://www.cnblogs.com/Hoyoak/p/11393194.html
- 1657: [Usaco2006 Mar]Mooo 奶牛的歌声
- 1610: [Usaco2008 Feb]Line连线游戏
- 1012: [JSOI2008]最大数maxnumber
- 1430: 小猴打架
- 1202: [HNOI2005]狡猾的商人
- 1059: [ZJOI2007]矩阵游戏
- 3039: 玉蟾宫
- 大公司都有哪些开源项目之腾讯
- Vue拖拽组件开发实例
- 一小时培训之神经网络入门
- 【LeetCode 290】 关关的刷题日记28 Word Pattern
- Redis知识点速查
- 上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?
- SpringBoot的微信点餐系统后台开发要点
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法