?? fangweidaodai.txt
字號:
4. 防衛導彈
一種新型的防衛導彈可截擊多個攻擊導彈。它可以向前飛行,也可以用很快的速度向下飛行,可以毫無損傷地截擊進攻導彈,但不可以向后或向上飛行。但有一個缺點,盡管它發射時可以達到任意高度,但它只能截擊比它上次截擊導彈時所處高度低或者高度相同的導彈。現對這種新型防衛導彈進行測試,在每一次測試中,發射一系列的測試導彈(這些導彈發射的間隔時間固定,飛行速度相同),該防衛導彈所能獲得的信息包括各進攻導彈的高度,以及它們發射次序。現要求編一程序,求在每次測試中,該防衛導彈最多能截擊的進攻導彈數量,一個導彈能被截擊應滿足下列兩個條件之一:
a)它是該次測試中第一個被防衛導彈截擊的導彈;
b)它是在上一次被截擊導彈的發射后發射,且高度不大于上一次被截擊導彈的高度的導彈。
輸入數據:第一行是一個整數n,以后的n各有一個整數表示導彈的高度。
輸出數據:截擊導彈的最大數目。
分析:定義l[i]為選擇截擊第i個導彈,從這個導彈開始最多能截擊的導彈數目。
由于選擇了第i枚導彈,所以下一個要截擊的導彈j的高度要小于等于它的高度,所以l[i]應該等于從i+1到n的每一個j,滿足h[j]<=h[i]的j中l[j]的最大值。
程序如下:
#include<stdio.h>
int main()
{
int i,j,n,max,h[100],l[100];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&h[i]);
l[n-1]=1;
for(i=n-2;i>=0;i--)
{
max=0;
for(j=i+1;j<n;j++)
if(h[i]>h[j]&&max<l[j])
max=l[j];
l[i]=max+1;
}
printf("%d",l[0]);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -