首页 > 其他分享 >1187. 导弹防御系统

1187. 导弹防御系统

时间:2023-07-01 17:11:58浏览次数:34  
标签:int 1187 up dfs 导弹 防御 ans 序列

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

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

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

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

输入格式

输入包含多组测试用例。

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

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

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

输出格式

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

数据范围

1≤n≤50

输入样例:

5
3 5 2 4 1
0 

输出样例:

2

样例解释

对于给出样例,最少需要两套防御系统。

一套击落高度为 3,4 的导弹,另一套击落高度为 5,2,1的导弹。

 

题解

由于题目给了两种选择,每个数即可加入单调上升的序列,也可以加入单调下降的序列,且我们无法得知哪一种方案更好,因此需要枚举所有状态。

所以,本题不适用动态规划。

整体思路是,枚举每个数加入的序列种类,但是这样的复杂度是2的n次方,指数级复杂度,可以用最优化剪枝优化。

举个例子,如果将一个数加入了上升序列,那么最优的放法,就是放入允许的最大的末尾序列元素后面,这样可以使后面的队列元素不会有更差的放法;

用数学语言描述就是,对于所有的上升序列尾部元素集合{up},当元素 x>up[i]且x<=up[i+1]时,使up[i]=x;

然后在dfs过程中,如果当前结果已经大于等于目前的最优解,可以直接ruturn剪掉这一部分。(参考了他人的思路和代码)

代码

 

#include <bits/stdc++.h>
#define ll long long
#define PII pair<int,int> 
using namespace std;

int n,ans=50;
int a[100],up[100],down[100];
void dfs(int x,int u,int d)
{
	if(u+d>=ans) return;
	if(x==n+1){
		ans=min(ans,u+d);
		return;
	}
	
	int k = 0;
	while (k < u && up[k] >= a[x]) k++;
	int num = up[k];
	up[k] = a[x];
	if (k < u) dfs(x + 1, u, d);
	else dfs(x + 1, u + 1, d);
	up[k] = num;
	
	k = 0;
	while (k < d && down[k] <= a[x]) k++;
	num = down[k];
	down[k] = a[x];
	if (k < d) dfs(x + 1, u, d);
	else dfs(x + 1, u , d + 1);
	down[k] = num;
}
void solve()
{
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	ans=50;
	dfs(1,0,0);
	cout<<ans<<endl;
}
int main()
{
	int T=1;
	//cin>>T; 
	while(1)
	{
		cin>>n;
		if(n==0) break;
		else solve();
	}
	return 0;
}

 

标签:int,1187,up,dfs,导弹,防御,ans,序列
From: https://www.cnblogs.com/zack-ze-kun/p/17519544.html

相关文章

  • 1010. 拦截导弹
    某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。......
  • 网安--暴力破解防御
    防御方式:1、二次验证验证码、IP验证、行为识别等2、WAF等安全产品3、强制修改密码4、取消密码登录用户建议: ......
  • 智安网络|攻防演练对抗:网络边界自动化防御的关键
    在当今高度互联的数字世界中,网络安全的重要性日益凸显。为了应对不断增长的网络威胁,组织和企业需要采取主动的防御策略,其中攻防演练对抗和自动化防御在保护网络边界方面扮演着重要的角色。本文将探讨攻防演练对抗的意义,并介绍如何通过自动化防御技术来增强网络边界的安全性。一、攻......
  • 服务器防御DDOS的方法
    对付DDoS是一个系统工程,想仅仅依靠某种系统或产品防住DDoS是不现实的,可以肯定的是,完全杜绝DDoS目前是不可能的,但通过适当的措施抵御90%的DDoS攻击是可以做到的,基于攻击和防御都有成本开销的缘故,若通过适当的办法增强了抵御DDoS的能力,也就意味着加大了攻击者的攻击成本,那么绝大多数......
  • 第四届“强网”拟态防御国际精英挑战赛MISC-mirror
    题目附件请自取链接:https://pan.baidu.com/s/18K00ClgwJsqmKphPmqMpHw提取码:6r3jfull.png使用010Editor打开出现CRC校验报错,猜测需要修复宽高,其次发现了文件末尾附加了镜像翻转的png字节流数据将附加数据提取出来另存为png文件,通过分析不难发现将字节流数据逆序然后每十六个字......
  • 一种中间具有球体带尾翼的椭圆体导弹弹头
    一种中间具有球体带尾翼的椭圆体导弹弹头所属技术领域:本发明涉及一种中间具有球体带尾翼的椭圆体导弹弹头,尤其是一种椭圆体导弹弹头。背景技术:传统导弹弹头在飞行中很难改变飞行轨迹,这就造成了导弹极易被敌方拦截。一种中间具有球体带尾翼的椭圆体导弹弹头是一种椭圆体导弹弹头......
  • IP fragment是什么意思?如何防御IP fragment攻击?
    IP报文中,与报文分片有关的几个字段是:DF(Don’tFragmentate)位、MF位,FragmentOffset、Length。DF和MF就是前面提到3位标识位中的第二和第三位,FragmentOffset就是“13位分片偏移”字段,Length就是“16位报文总长度”字段。如果上述字段的值出现矛盾,而设备处理不当,会对设备造成一定的......
  • 【BZOJ 3156】防御准备 题解
    原题令\(S_{i}=\sum_{j=1}^{i}j\),\(f_{i}\)为处理到第\(i\)个位置放置守卫塔的最小花费。观察题意,容易得到在\((1<=j<=i-1)\)时,有\(f_{i}=min\left\{f_{j}+\sum_{k=j+1}^{i-1}(i-k)+a_{i}\right\}\)①\(f_{i}=min\left\{f_{j}+\sum_{k=j+1}^{i-1}(i-k)\ri......
  • 常见漏洞简介 防御建议
    BurtForce(暴力破解漏洞)概述:连续性尝试+字典+自动化(攻击者在不知道目标账号和密码的情况下进行尝试性的登录,在这个尝试的过程中,会使用一些自动化的工具和一个特定的字典,比如一个账号密码库,实现一个高效的自动化的连续的尝试性登录,从而得到一些有效的账户和密码)字典:一个有效的......
  • 新手小白知识 | 服务器用什么防御?怎么做服务器防护?
    在这个互联网时代,我们经常遇到网站无法访问等一些现象,众所周知,服务器对于企业来讲是必不可少的资源,服务器关系整个公司的网络以及数据,那么服务器的防护就更加的重要,随着网络技术发展不断扩大,各种各样的bingdu以及服务器安全等问题日益突出,在这个时候我们就需要保护我们服务器的安......