`
jacky
  • 浏览: 25964 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

导弹拦截系统-最长降序序列

阅读更多
引用

Problem
中国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够达到任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在使用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。

Input
最多20个整数,分别表示导弹依次飞来的高度(雷达给出高度数据是不大于30000的正整数)

Output
两个整数M和N。表示:这套系统最多能拦截 M 枚导弹,如果要拦截所有导弹最少要配备 N 套这种导弹系统。

Sample Input
300 250 275 252 200 138 245

Sample Output
5 2

思路:
1.算出每个数字后面都几个小于自己的数字(factor)
2.由最大factor的数字开始替归,寻找往下比自己小,但factor又最大的那个值
3.由这些值串起来,就成了最长的降序序列。

def defend(missiles,fightStack)
	return nil if !missiles || missiles.size==0
	missilesSize = missiles.size
	factors = Array.new(missilesSize)
	largest_f_index = missilesSize-1
	largest_f = 0
	missiles.size.downto(1){|i|
		index = i-1		
		m = missiles.at(index).to_i		
		m_factor = 0
		(i...missilesSize).each{|j|
			m_back = missiles.at(j).to_i			
			m_factor += 1 if m_back<m
		}
		factors[index] = m_factor	
		(largest_f_index=index;largest_f=m_factor)if  m_factor >largest_f
	}		
	return getFightStack(largest_f_index,missiles,factors,fightStack)	
end
def getFightStack(beginIndex,data,factors,fightStack)
		return fightStack if beginIndex>=data.length		
		m = data.at(beginIndex)
		m_factor = factors.at(beginIndex)
		fightStack << m		
		nextIndex = beginIndex+1
		biggestIndex=data.size
		biggestF = 0
		(nextIndex...data.size).each{|j|
			nextM = data.at(j)
			nextF = factors.at(j)			
			(biggestF=nextF;biggestIndex=j) if nextM<m && nextF>=biggestF			
		}	
		getFightStack(biggestIndex,data,factors,fightStack)	
end

#
$data = Array.[](300,250,275,252,200,138,240)
m_data = $data
count = 0
while true
	fightStack = defend(m_data,Array.new)
	break if !fightStack
	bestSolution = fightStack if count==0
	count += 1
	m_data = m_data- fightStack
end

p bestSolution
p bestSolution.size
p count

分享到:
评论

相关推荐

    简单的DP运用+贪心算法

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

    易语言导弹拦截游戏-易语言

    在游戏中,玩家可能需要编写或调用易语言编写的函数来控制防御系统,拦截来袭的导弹。这涉及到了编程中的逻辑控制、条件判断、循环结构等基础知识点。例如,玩家可能需要根据导弹的飞行轨迹和速度来设置拦截点,这就...

    一种敏捷导弹控制系统的设计方法_李友年

    在当今的空中防御领域,空空导弹作为拦截空中目标的关键武器,其机动性和控制系统的设计直接关系到导弹的性能和作战效能。传统的空空导弹控制主要依靠气动舵面产生的气动升力来改变飞行轨迹,但是这种方法存在响应...

    AI.rar_ai_导弹_导弹拦截_拦截导弹_飞机

    这里可能有一个决策支持系统,根据计算结果决定何时发射拦截导弹,如何调整导弹飞行轨迹以确保命中目标。 6. **实时数据处理**:在实际应用中,AI系统需要实时处理大量数据,如雷达探测信息、GPS坐标、飞行速度等,...

    算法分析与设计:动态规划(数字三角形+导弹拦截问题)(C++可执行源码+完整算法分析)

    题目 1:如下图所示的数字三角形。...输入导弹依次飞来的高度(雷达给出的高度数据是不大于 30000 的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

    易语言导弹拦截游戏

    在这款游戏中,玩家需要操作防御系统,通过发射拦截导弹,成功击落来袭的敌方导弹,以保护自己的基地安全。 易语言是一种中国自主研发的、面向初学者的编程语言,其语法简洁明了,适合初学者快速上手。在《易语言...

    matlab导弹制导系统仿真.zip

    在军事科技中,MATLAB也被用来构建导弹制导系统的仿真模型,以研究和优化导弹的飞行轨迹、控制策略和拦截效果。本篇文章将深入探讨“matlab导弹制导系统仿真.zip”文件中的内容,带你走进导弹制导系统仿真的世界。 ...

    运动学导弹拦截计算方法含Matlab源码.zip

    通过这个模型,我们可以研究不同参数(如导弹的速度、射程、瞄准角度)对拦截成功率的影响,也可以探索如何优化导弹的控制系统以提高拦截效率。此外,该模型还可以扩展到考虑更复杂的环境因素,如大气层变化、地球...

    导弹追击模型-matlab求解.doc

    导弹追击模型-MATLAB求解 该文档是关于导弹追击模型的MATLAB求解,通过建立数学模型和使用MATLAB软件来求解导弹追击问题。实验主要分为三部分:(1) 导弹在何时何处击中敌舰?(2) 如果敌舰立即逃逸,导弹何时何...

    最少拦截系统.cpp

    采用贪心策略,首先把第一枚导弹的高度存入数组中,意味着要使用第一套拦截系统,然后如果第二枚导弹的高度大于第一枚的话(不能拦截),把第二枚的高度加入数组中(第一枚之后),需要增加另一套拦截系统,如果小于...

    【气动学】导弹拦截计算方法【含Matlab源码 982期】.zip

    【气动学】导弹拦截计算方法是涉及到航空航天领域的一个重要课题,主要研究如何设计和实施导弹拦截策略,确保在复杂的战场环境下成功击中目标。在这个982期的资料中,我们聚焦的是利用Matlab软件进行相关的计算和...

    易语言源码导弹拦截游戏.rar

    这款"易语言源码导弹拦截游戏.rar"压缩包文件包含了一个使用易语言编写的导弹拦截游戏的完整源代码,这对于初学者来说是一份极好的学习资源。 首先,我们要理解易语言的核心特点。易语言的设计理念是“易学易用”,...

    拦截导弹.zip

    在这个案例中,文件的命名暗示了它可能与某种导弹防御系统或模拟拦截过程的编程挑战有关。"蓝桥杯VIP题和题解"表明这个压缩包的内容是针对蓝桥杯竞赛的VIP题目及其解决方案,这是一项面向程序设计和算法技能的比赛。...

    防卫导弹--动态规划

    防卫导弹int select(int h[],int n) { int i,j,l[100],max; l[n-1]=1; for(i=n-2;i&gt;=0;i--) { max=0; for(j=i+1;j;j++) if(h[i]&gt;=h[j]&&max[j]) max=l[j]; l[i]=max+1; }

    算法-拦截导弹(信息学奥赛一本通-T1289)(包含源程序).rar

    《算法-拦截导弹(信息学奥赛一本通-T1289)》是针对信息学奥林匹克竞赛中的一道典型问题进行深入解析的资料,其中包含了源程序,这为我们提供了理解和学习算法的良好平台。该问题的核心是模拟导弹拦截过程,通过...

    MATLAB导弹拦截机动目标仿真

    MATLAB导弹拦截机动目标仿真

    导弹打巫师-少儿编程scratch项目源代码文件案例素材.zip

    "导弹打巫师"是一个适合少年儿童学习编程的Scratch项目,通过这个游戏案例,孩子们可以了解和实践基本的编程概念,提升逻辑思维能力和问题解决能力。Scratch是麻省理工学院(MIT)媒体实验室“终身幼儿园团队”开发的...

    【运动学】导弹拦截计算方法matlab源码.md

    【运动学】导弹拦截计算方法matlab源码.md

    气动学基于matlab导弹拦截计算方法【含Matlab源码 982期】.zip

    CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:P1_9.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 ...若运行有误,根据提示修改;...

    易语言源码易语言导弹拦截游戏

    易语言源码易语言导弹拦截游戏提取方式是百度网盘分享地址

Global site tag (gtag.js) - Google Analytics