NOIP1999提高组第一题导弹拦截问题第二问标答的算法证明

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/30 17:24:07
NOIP1999提高组第一题导弹拦截问题第二问标答的算法证明
xV[oF+~ QTUj@>E78k#6]*9W (aC͒ M% ! =1U}\?|x|ݏJfMBm+Y ޭعqT qu`Qv65Mz|J'!ZZ!8xpy}v%X*9 E% z(y vXmSN[ܳ\GQpaGm I@.4Y (`dv%4‰E U),zNKo261MZbF E h?v]$JQŪB+v^SK ڀ1r!xDB4J9}G%b&m0~wvWjv#u*{XE[FA+k$b^jo#818ȒR EIV0p׈A9|Uś):*qCk)mtJ6̄Ե;D] ^ڢ[8Yۯ!ɩs0@ڑvQ(D >zLCU"Cj,*0,kQkRrCgyL>a|q33-MmE(jHR烼k;GxNsؠQE`y>+pYRȧuzKW:Õu1.^}˙PXZsϘW?s39g%1"3ϸ_E.kVAI\D[fKeopm),L<hpEG`_bx?v s†Pp)D7N‘DzE;dnCدdzt]+koz'6i8r! ǗnŠG>32 ct|N{=C

NOIP1999提高组第一题导弹拦截问题第二问标答的算法证明
NOIP1999提高组第一题导弹拦截问题第二问标答的算法证明

NOIP1999提高组第一题导弹拦截问题第二问标答的算法证明
第二问朴素的是“潜力法”.就是用打的最低的炮台去打这个导弹.
更好的算法是求出所有下降序列的个数,即求最长上升序列.因为dilworth定理.
dilworth定理:最长的上升子序列每一个成员必不属于同一个下降子序列.
证明:设最长不降子序列中元素 ai,aj (i

最多能拦截的导弹数就是求输入序列的最长不升序列长度,总共需要的拦截系统是输入序列的最长上升序列长度,所求即为这个长度减一。
这里要注意的是对输入的处理问题,因为输入序列是用逗号隔开的,不能直接READ,只能作为字符读入后再进行处理,这里有两个可行的办法,一种是一个一个字符读入,遇到逗号就开始存数,另一种是一次性读入整个字符串,再利用pos,copy,delete等字符串处理函数把数...

全部展开

最多能拦截的导弹数就是求输入序列的最长不升序列长度,总共需要的拦截系统是输入序列的最长上升序列长度,所求即为这个长度减一。
这里要注意的是对输入的处理问题,因为输入序列是用逗号隔开的,不能直接READ,只能作为字符读入后再进行处理,这里有两个可行的办法,一种是一个一个字符读入,遇到逗号就开始存数,另一种是一次性读入整个字符串,再利用pos,copy,delete等字符串处理函数把数字提取出来。
程序大概是这样的:
program p8_3(input,output);
const maxn=5000;maxlongint=5001;
var i,j,n,l,maxlen:longint;
a,len,t:array[0..maxn] of longint;
begin
assign(input,'daodan.in');
reset(input);
assign(output,'daodan.out');
rewrite(output);

{这里应该要判断n的值是多少,但我不知道怎么根据输入的数字判断出到底输入了几个数字}
readln(n);
for i:=1 to n do read(a[i]);
for i:=1 to n do len[i]:=1;
for i:=n-1 downto 1 do
for j:=i+1 to n do
if (a[j]=len[i]) then len[i]:=len[j]+1;
maxlen:=1;
for i:=1 to n do if len[i]>maxlen then maxlen:=len[i];
a[0]:=maxlongint;len[0]:=maxlen+1;
for i:=0 to n do if len[i]=1 then t[i]:=1 else t[i]:=0;
for l:=1 to maxlen do
begin
for i:=n downto 1 do
if len[i]=1 then
begin
j:=i-1;
while (j>=0) and(a[j]<>a[i]) do
begin
if (a[j]>a[i]) and(len[j]=l+1) then inc(t[j],t[i]);
dec(j)
end;
end;
end;
writeln(maxlen,' ',t[0]);
{在网页上要求输出的其实是a[0]-1的值,但老师提供的历年noip试题中a[0]不用减1}
close(input);
close(output);
end.

收起

NOIP1999提高组第一题导弹拦截问题第二问标答的算法证明 程序+导弹拦截问题 pascal拦截导弹问题的解题思路?某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不 怎样拦截低空掠海飞行的反舰导弹 用java做这道算法题 快 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于 2010年noip复赛第三题导弹拦截答案(Pascal语言)请给我思路和标准程序(标程可以省略,但思路情讲清晰, 世界上最先进的导弹是什么?中国最厉害的导弹世界导弹排名做少?中国有反导弹拦截系统吗? 1.目前射程最远的导弹是什么,能射多远2.拦截导弹,拦截率能达到多少洲际导弹能覆盖全球吗 洲际导弹属于核武器吗 美国导弹防御系统能否有效拦截小行星?这里不谈政治,只说美国航天和导弹工业实力能否达到拦截小行星的能力? 超级计算机运算速度快和导弹发射和拦截导弹有关系吗?比如导弹发射到某个目标,或者拦截导弹成功拦截某个导弹,要计算导弹的发射速度,发射时间以及空气阻力等等.而能做出这么精确的反 8马赫换算成千米/时是多少,那个速度导弹可以拦截吗? 8马赫换算成千米/时是多少,那个速度导弹可以拦截吗? 导弹在多远时拦截?核弹爆炸杀伤范围太远了 巡航导弹、弹道导弹、拦截导弹和民用客机的飞行速度各是多少? 1130近防炮能拦截6倍音速的反舰导弹吗 激光拦截导弹大家都知道光速是导弹速度的几万倍,假如从美国发射导弹袭击我们,我们用激光拦截是否有几万次的机会? 关于陨石坠落地球的问题2013年2月15日一颗陨石坠落在俄罗斯境内,俄国的军力如此强大,难道俄军的S300、S400的导弹防御系统无法拦截吗?而且,俄罗斯也有打卫星的导弹,难道也派不上用场吗?虽 拓展提高第一题