引用
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
分享到:
相关推荐
问题背景:某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够达到任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹...
在游戏中,玩家可能需要编写或调用易语言编写的函数来控制防御系统,拦截来袭的导弹。这涉及到了编程中的逻辑控制、条件判断、循环结构等基础知识点。例如,玩家可能需要根据导弹的飞行轨迹和速度来设置拦截点,这就...
在当今的空中防御领域,空空导弹作为拦截空中目标的关键武器,其机动性和控制系统的设计直接关系到导弹的性能和作战效能。传统的空空导弹控制主要依靠气动舵面产生的气动升力来改变飞行轨迹,但是这种方法存在响应...
这里可能有一个决策支持系统,根据计算结果决定何时发射拦截导弹,如何调整导弹飞行轨迹以确保命中目标。 6. **实时数据处理**:在实际应用中,AI系统需要实时处理大量数据,如雷达探测信息、GPS坐标、飞行速度等,...
题目 1:如下图所示的数字三角形。...输入导弹依次飞来的高度(雷达给出的高度数据是不大于 30000 的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
在这款游戏中,玩家需要操作防御系统,通过发射拦截导弹,成功击落来袭的敌方导弹,以保护自己的基地安全。 易语言是一种中国自主研发的、面向初学者的编程语言,其语法简洁明了,适合初学者快速上手。在《易语言...
在军事科技中,MATLAB也被用来构建导弹制导系统的仿真模型,以研究和优化导弹的飞行轨迹、控制策略和拦截效果。本篇文章将深入探讨“matlab导弹制导系统仿真.zip”文件中的内容,带你走进导弹制导系统仿真的世界。 ...
通过这个模型,我们可以研究不同参数(如导弹的速度、射程、瞄准角度)对拦截成功率的影响,也可以探索如何优化导弹的控制系统以提高拦截效率。此外,该模型还可以扩展到考虑更复杂的环境因素,如大气层变化、地球...
导弹追击模型-MATLAB求解 该文档是关于导弹追击模型的MATLAB求解,通过建立数学模型和使用MATLAB软件来求解导弹追击问题。实验主要分为三部分:(1) 导弹在何时何处击中敌舰?(2) 如果敌舰立即逃逸,导弹何时何...
采用贪心策略,首先把第一枚导弹的高度存入数组中,意味着要使用第一套拦截系统,然后如果第二枚导弹的高度大于第一枚的话(不能拦截),把第二枚的高度加入数组中(第一枚之后),需要增加另一套拦截系统,如果小于...
【气动学】导弹拦截计算方法是涉及到航空航天领域的一个重要课题,主要研究如何设计和实施导弹拦截策略,确保在复杂的战场环境下成功击中目标。在这个982期的资料中,我们聚焦的是利用Matlab软件进行相关的计算和...
内容概要:本文综述了当前防空导弹拦截效果评估的相关方法和技术发展情况。首先详细介绍了评估的基本流程及毁伤等级判定标准;其次探讨了多种评估方法及其优劣对比,例如直接观察法和信息分析法等;再者,分析了几种...
这款"易语言源码导弹拦截游戏.rar"压缩包文件包含了一个使用易语言编写的导弹拦截游戏的完整源代码,这对于初学者来说是一份极好的学习资源。 首先,我们要理解易语言的核心特点。易语言的设计理念是“易学易用”,...
在这个案例中,文件的命名暗示了它可能与某种导弹防御系统或模拟拦截过程的编程挑战有关。"蓝桥杯VIP题和题解"表明这个压缩包的内容是针对蓝桥杯竞赛的VIP题目及其解决方案,这是一项面向程序设计和算法技能的比赛。...
防卫导弹int select(int h[],int n) { int i,j,l[100],max; l[n-1]=1; for(i=n-2;i>=0;i--) { max=0; for(j=i+1;j;j++) if(h[i]>=h[j]&&max[j]) max=l[j]; l[i]=max+1; }
《算法-拦截导弹(信息学奥赛一本通-T1289)》是针对信息学奥林匹克竞赛中的一道典型问题进行深入解析的资料,其中包含了源程序,这为我们提供了理解和学习算法的良好平台。该问题的核心是模拟导弹拦截过程,通过...
MATLAB导弹拦截机动目标仿真
具体内容涵盖利用滑翔方案弹道模型计算制导航弹、使用特定的控制规律进行实际弹道跟踪仿真的方法论、基于不同拦截策略对目标实施追踪以及对某一具体型号吸气式超声速巡航导弹在特定高度上执行稳定性和动态响应分析的...
"导弹打巫师"是一个适合少年儿童学习编程的Scratch项目,通过这个游戏案例,孩子们可以了解和实践基本的编程概念,提升逻辑思维能力和问题解决能力。Scratch是麻省理工学院(MIT)媒体实验室“终身幼儿园团队”开发的...
【运动学】导弹拦截计算方法matlab源码.md