导弹防御系统(LIS)
导弹防御系统
为了对抗附近恶意国家的威胁,R国更新了他们的导弹防御系统。
一套防御系统的导弹拦截高度要么一直上升要么一直下降。
例如,一套系统先后拦截了高度为3和高度为4的两发导弹,那么接下来该系统就只能拦截高度大于4的导弹。
给定即将袭来的一系列导弹的高度,请你求出至少需要多少套防御系统,就可以将它们全部击落。
输入格式
输入包含多组测试用例。
对于每个测试用例,第一行包含整数n,表示来袭导弹数量。
第二行包含n个不同的整数,表示每个导弹的高度。
当输入测试用例n=0时,表示输入终止,且该用例无需处理。
输出格式
对于每个测试用例,输出一个占据一行的整数,表示所需的防御系统数量。
数据范围
1≤n≤50
输入样例:
5
3 5 2 4 1
0
输出样例:
2
样例解释
对于给出样例,最少需要两套防御系统。
一套击落高度为3,4的导弹,另一套击落高度为5,2,1的导弹。
题解:
该题是要求解至少需要多少个上升子序列和下降子序列可将这一整个序列覆盖。
设 dfs(u,v,pos) 表示已经有u个上升子序列,v个下降子序列,正在处理第pos个数。up[i]记录第i个上升子序列的最后一个元素,down[i]记录第i个下降子序列的最后一个元素。
当前数可以加入上升子序列,也可以加入下降子序列。
根据贪心算法思想,
如果是放入一个上升子序列,则需要放入所有子序列中最后一个元素最大的那一个,如果所有子序列的最后一个元素均大于当前数,则需要重新创建一个子序列。(试想,上升子序列的最后一个元素是越小越好。)
如果是放入一个下降子序列,则需要放入所有子序列中最后一个元素最小的那一个,如果所有子序列的最后一个元素均小于当前数,则需要重新创建一个子序列。(试想,下降子序列的最后一个元素是越大越好。)
up[]根据这种策略是已经排好序了的,前从往后,序列的最后一个元素的大小依次递减;down[]也是如此
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 55;
int up[N],down[N],a[N];
int ans,n;
void dfs(int u,int v,int pos){//u个上升序列,v个下降序列,正在处理第pos个数if(u+v>=ans) return;if(pos==n){ans=min(ans,u+v);return;}int i,temp;for(i=1;i<=u;i++){//寻找第一个最后一个元素比当前数小的序列if(up[i]<a[pos]) break;}temp=up[i];up[i]=a[pos];//将当前数加入序列dfs(max(i,u),v,pos+1);up[i]=temp;//恢复现场for(i=1;i<=v;i++){//寻找第一个最后一个元素比当前数大的元素if(down[i]>a[pos]) break;}temp=down[i];down[i]=a[pos];//将当前数加入序列dfs(u,max(v,i),pos+1);down[i]=temp;//恢复现场
}
int main(){//freopen("1.txt","r",stdin);while(~scanf("%d",&n),n){for(int i=0;i<n;i++)scanf("%d",&a[i]);ans=100;dfs(0,0,0);printf("%d\n",ans);}return 0;
}
导弹防御系统(LIS)相关推荐
- 拦截导弹 导弹防御系统
拦截导弹 & 导弹防御系统 拦截导弹 导弹防御系统 拦截导弹 题目链接:acwing1010. 拦截导弹 题目描述: 输入输出: 分析: 第一个问题为输出最长递减子序列,由于导弹数在1000以 ...
- C++---最长上升子序列模型---导弹防御系统(每日一道算法2023.3.5)
注意事项: 本题的dp:"线性dp-最长上升子序列的长度" 本题的贪心(单调队列):"最长上升子序列模型-拦截导弹" 下面思路只讲如何运用这些东西来解这道题 强 ...
- 导弹防御系统[导弹拦截系统]
导弹防御系统[dfs] 题目链接 引言(请忽略):今天是小白ACM集训的日子,然后数据结构实在是太难了,真是学不动了,然后就只能无助地去复习以前的题了,记得以前在SDUT程设二里面有一道题叫最少拦截系 ...
- 导弹防御系统,如何跟蜻蜓的大脑学习计算?
来源:大数据文摘 作者:Frances Chance 多雨的夏季,蜻蜓最为常见,这些美丽的生物的飞行速度极快,狩猎能力也极为出色:蜻蜓狩猎的成功率捕获了高达95% ,它们一天可以吃掉数百只蚊子. 这种 ...
- 问题 : 导弹防御系统
题目描述 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- CG14导弹防御系统
[问题描述] 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的 ...
- AcWing LIS相关问题 187 导弹防御系统
''' DFS枚举所有可能的元素放到上升序列或者下降序列的情况 '''ans = [0x7fffffff] # 最小序列总数 up = [0] * 60 # 上升序列的尾数数值 down = [0] ...
- 【NOIP2013模拟】导弹防御塔
题目 Freda的城堡-- "Freda,城堡外发现了一些入侵者!" "喵-刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~" "可是入侵者已经 ...
- P1020 导弹拦截(LIS)
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- 信息学奥赛第十节 —— 贪心算法(渡河问题POJ 1700 Crossing River + 拦截导弹的系统数量求解)
复习概念 贪心算法又叫贪婪算法,是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,贪心算法不从整体最优上加以考虑,它所做出的是在某种意义上的局部最优解. 无后效性:贪心算法不是对所有问题都 ...
最新文章
- windows桌面待办事项_记录在电脑便签中的内容怎么在电脑桌面显示透明日历清单?...
- 多线程-多图下载综合案例-SDWebImage框架实现代码
- WinForms项目升级.Net Core 3.0之后,没有WinForm设计器?
- 周敏教授计算机编码与密码学,中国科学院计算机与控制学院博士生导师:张玉清教授...
- androidstudio带pom的上传到jcenter_输送机@网带输送机@304网带输送机@304不锈钢网带输送机@输送机网带厂家定制...
- php explode txt,PHP explode():字符串转数组
- 如何解决comctl32.dll文件丢失的问题?
- mysql查询m到n条数据库,对查询数据库中第M到N条记录的思考
- MYSQL—— 启动MYSQL 57 报错“The service MYSQL57 failed the most recent........等”的问题解决方式!...
- oracle自增列问题i,Oracle序列 和 SQL SERVER 自增列的问题-oracle
- Android性能优化系列---管理你的app内存(一)
- 保留正常工作的环境,等自己的搞好后再替换
- Dreamweaver中出现 以下翻译器没有被装载,由于错误:xxxx.htm:有不正确的设置信息 问题的解决方案(8,cs3,cs4似乎都会出现改问题)...
- 最小二乘法正规方程推导过程
- html标签嵌套规则
- python读取csv某一列 pandas_numpy和pandas实战:文件夹CSV文件中的第一列数据
- linux桌面网络连接是个X,Xbrowser如何运行多个X桌面
- android开发学习:打电话和发短信
- math: 凸函数、拟凸函数和保凸运算
- 串口通信--两台PC机之间的简单传输
热门文章
- npm 报错 426 Upgrade Required
- 360抢票 网站维护中 你的登录被踢了!
- 某网站cookie加密黑盒调用与算法还原
- Java根据纯真IP库获取具体的地址信息
- wordpress 后台添加简单的友情链接
- array 前端面试题_前端面试中的常见的算法问题
- 【读点论文】Mobile-Former: Bridging MobileNet and Transformer,transformer全局把控,mobilenet细节处理,很低的FLOPs展现效果较佳
- Mysql 之 缓存更新策略
- 纯前端滑块拼图验证组件(多端兼容)
- linux 3.0实时性,如何1分钟内对 Linux 性能快速分析(113资讯网)