为了对抗附近恶意国家的威胁,R国更新了他们的导弹防御系统。

一套防御系统的导弹拦截高度要么一直 严格单调 上升要么一直 严格单调 下降。

例如,一套系统先后拦截了高度为 3 和高度为 4 的两发导弹,那么接下来该系统就只能拦截高度大于 4 的导弹。

给定即将袭来的一系列导弹的高度,请你求出至少需要多少套防御系统,就可以将它们全部击落。

Input

多组测试用例。

对于每个测试用例,第一行包含整数 n  ( 1 ≤ n ≤ 50 ),表示来袭导弹数量。

第二行包含 n 个不同的整数,表示每个导弹的高度。

当输入测试用例 n = 0 时,表示输入终止,且该用例无需处理。

Output

每个测试用例输出一行:一个整数,表示所需的防御系统数量。

Sample Input

5
3 5 2 4 1
0

Sample Output

2

思路:题意大致为给定一个序列,求最少可以用多少个上升子序列和下降子序列将其表示出来。

采用dfs和LIS的贪心求法,用bfs会爆内存?因为答案最大也不可能会大于n,所以ans初始化为n。后续更新时更新ans的最小值。对每一个d[i]都有两个方向的操作。最大为2的50次方。

同时还要回溯恢复现场。

#include<bits/stdc++.h>
using namespace std;
int ans,sum;
const int N=110;
int d[N];
int up[N];
int down[N];
int n;
void dfs(int u,int su,int sd)
{if(su+sd>=ans) return ;if(u==n){ans=su+sd;return;}//1接到某一个上升序列的末尾int k=0;while(k<su&&up[k]>=d[u]) k++;int t=up[k];up[k]=d[u];if(k<su)  dfs(u+1,su,sd);else dfs(u+1,su+1,sd);up[k]=t;//2放到下降序列末尾k=0;while(k<sd&&down[k]<=d[u]) k++;t=down[k];down[k]=d[u];if(k<sd) dfs(u+1,su,sd);else dfs(u+1,su,sd+1);down[k]=t;
}
int main()
{while(cin>>n,n){for(int i=0;i<n;i++)cin>>d[i];ans=n;dfs(0,0,0);cout<<ans<<endl;}return 0;
}

导弹防御系统(LIS+dfs)相关推荐

  1. 导弹防御系统[导弹拦截系统]

    导弹防御系统[dfs] 题目链接 引言(请忽略):今天是小白ACM集训的日子,然后数据结构实在是太难了,真是学不动了,然后就只能无助地去复习以前的题了,记得以前在SDUT程设二里面有一道题叫最少拦截系 ...

  2. 拦截导弹 导弹防御系统

    拦截导弹 & 导弹防御系统 拦截导弹 导弹防御系统 拦截导弹 题目链接:acwing1010. 拦截导弹 题目描述: 输入输出: 分析: 第一个问题为输出最长递减子序列,由于导弹数在1000以 ...

  3. C++---最长上升子序列模型---导弹防御系统(每日一道算法2023.3.5)

    注意事项: 本题的dp:"线性dp-最长上升子序列的长度" 本题的贪心(单调队列):"最长上升子序列模型-拦截导弹" 下面思路只讲如何运用这些东西来解这道题 强 ...

  4. 导弹防御系统,如何跟蜻蜓的大脑学习计算?

    来源:大数据文摘 作者:Frances Chance 多雨的夏季,蜻蜓最为常见,这些美丽的生物的飞行速度极快,狩猎能力也极为出色:蜻蜓狩猎的成功率捕获了高达95% ,它们一天可以吃掉数百只蚊子. 这种 ...

  5. 问题 : 导弹防御系统

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

  6. CG14导弹防御系统

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

  7. AcWing LIS相关问题 187 导弹防御系统

    ''' DFS枚举所有可能的元素放到上升序列或者下降序列的情况 '''ans = [0x7fffffff] # 最小序列总数 up = [0] * 60 # 上升序列的尾数数值 down = [0] ...

  8. 【NOIP2013模拟】导弹防御塔

    题目 Freda的城堡-- "Freda,城堡外发现了一些入侵者!" "喵-刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~" "可是入侵者已经 ...

  9. P1020 导弹拦截(LIS)

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

  10. [tyvj1935 Poetize3]导弹防御塔 (二分图多重匹配)

    传送门 Description Freda控制着N座可以发射导弹的防御塔.每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚.在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚 ...

最新文章

  1. java compareto方法怎么排序的_深入理解Java中Comparable和Comparator排序
  2. 计算机硬件系统的构成教学设计,2.1 计算机硬件系统教学设计思路
  3. OneNand、Nand和Nor三种Flash的区别
  4. C语言窗口布局,Android开发入门之学习笔记(四):程序窗口的布局(二)
  5. python爬虫遇到js加密_当爬虫遇到js加密
  6. 财务报表越做越丑?这些秒杀Excel的可视化工具,人人都能用
  7. 《『若水新闻』客户端开发教程》——14.代码编写(6)
  8. [学习整理]eclipe/MyEclipse:重要的快捷键
  9. 入手mac后,这5个技巧和窍门你应该知道
  10. 条形码技术应用属于计算机系统的,条形码技术在现代物流系统中的应用
  11. x64位游戏call代码测试注入器
  12. 开发一个小程序商城需要多少钱?
  13. 沟通:如何用沟通解决80%的工作问题?
  14. 计算机无法继续安装程序,电脑提示nvidia安装程序无法继续 如何解决 - 驱动管家...
  15. Unity3D启动报错的解决方案
  16. 生活美学 | 8种咖啡冲煮器具分别有什么特点
  17. java界面绘制地铁路线_基于 HTML5 Canvas实现 的交互式地铁线路图
  18. 【CSDN 2020年度征文】江湖路远,不说再见,不负韶光
  19. java后台 apiV3 对接微信app支付
  20. Robosense速腾激光雷达使用坐标变换功能

热门文章

  1. redis搭建哨兵模式(哨兵模式原理)
  2. 程序员如何不加班?—— 时间管理篇
  3. 机器学习:数学加强(二)——条件概率、贝叶斯公式、常见分布、协方差、相关系数、切比雪夫不等式、大数定律
  4. 对短信验证码发送次数的限制
  5. 短信验证码,在键盘显示验证码
  6. linux学习(跟着b站尚硅谷老师学习)
  7. 支付宝提现至个人账户接口开发
  8. uboot移植之迷雾解码
  9. AURIX TC397 ASCLIN UART
  10. centos7:configure: error: perl >= 5.7.3 with Encode and Data::Dumper required by Texinfo.