華夏60 超音速戰鬥機是當今世界上機動性能最先進的戰鬥機。戰鬥過程中的乙個關鍵問題是如何在最短的時間內使飛機從當前的飛行高度和速度爬公升/俯衝到指定的高度並達到指定速度,以便佔據有利的戰鬥位置。
現假定只允許華夏60 執行以下三種基本飛行動作,並且只能在完成了乙個基本動作的情況下再去執行另乙個基本飛行動作。這樣華夏60 的飛行可以表示成由這三種基本飛行動作組成的動作序列。
(1) 維持原速做恆速爬公升飛行,直至飛行高度提高 ∆h 英呎;
(2) 水平加速飛直至速度提高1 馬赫(1 馬赫 ≈ 1200 公里/小時);
(3) 垂直俯衝飛行 ∆h 英呎,飛行速度會提高1 馬赫。
同時假定飛機的初始飛行速度和執行每個基本飛行動作初始時刻的飛行速度都是1 馬赫的整數倍,且不超過6 馬赫;初始飛行高度和執行每個基本飛行動作初始時刻的飛行高度都為 ∆h 英呎( ∆h 是整數)的整數倍。
實驗研究表明:在不同高度h 和不同的初始速度v 完成上述的三種基本飛行動作所需的時間也是各不相同的。表1~表3 給出了∆h = 15000英呎和最大飛行高度hm = 75000英呎時完成這三種基本飛行動作所需的時間。
表1 恆速爬公升飛行vh
1234
56012
1212
1112
1415000
111089
1011
3000098
6788
4500087
6665
6000086
6665
表2 水平加速飛行vh
1234
501111
1113
1515000
101099
1030000109
910104500098
99106000078
8997500077
788表3 垂直俯衝飛行vh
1234
53000054
3324500043
3226000033
2227500033
222根據表1~表3 的資料,欲使華夏60 戰鬥機從h = 0 英呎、v = 1 馬赫的飛行狀態達到h = 75000英呎、v = 6馬赫的飛行狀態的最短飛行時間是79 秒,相應的飛行動作序列是:
(1) 恆速爬公升飛行至15000 = h 英呎, 1 = v 馬赫狀態;
(2) 連續做兩次水平加速飛行至h = 15000英呎, v = 3 馬赫狀態;
(3) 連續做四次恆速爬公升飛行至h = 75000英呎, v = 3馬赫狀態;
(4) 水平加速飛行至 h = 75000 英呎, v = 4馬赫狀態;
(5) 連續做兩次垂直俯衝飛行至h = 45000英呎, v = 6馬赫狀態;
(6) 連續做兩次恆速爬公升飛行至h = 75000英呎, v = 6馬赫狀態。
現在小明駕駛華夏60 戰鬥機以v1馬赫的速度飛行於h1英呎高度,中隊
長發出了讓他以v2馬赫的速度飛行於h2英呎高度的指令。請你編寫程式幫
小明決策一下如何飛行才能花費最少的時間執行完中隊長下達的命令。
輸入:檔案由四部分組成。
(1)第一部分由一行構成,存放格式為:h1 v1 h2 v2 ∆h hm 。
(2)第二部分存放了表1 的內容,共有 hm /∆h 行,每行有6 列。表中第i 行、第j 列的資料表示華夏60 戰鬥機在 ∆h*(i-1) 英呎的高度以j馬赫的速度做恆速爬公升飛行,飛行高度提高∆h英呎所需的時間。
(3)第三部分存放了表2 的內容,共有 hm /∆h+1 行,每行有5 列。表中第i 行、第j 列的資料表示華夏60 戰鬥機在 ∆h*(i-1) 英呎的高度以j 馬赫的初始速度做水平加速飛行,飛行速度提高1 馬赫所需要的時間。
(4)第四部分存放了表3 的內容,共有 hm /∆h-1 行,每行有5 列。表中第i 行、第j 列的資料表示華夏60 戰鬥機在 ∆h*(i+1) 英呎的高度以j 的初始速度做垂直俯衝飛行,飛行高度降低∆h英呎所需的時間。
注意:輸入資料中所有的資料都是整數。hm/∆h<=50
輸出:
輸出資訊用兩行來存放。第一行存放你求出的最優方案所需的時間。第二行存放該最優方案的動作序列(以r 表示恆速爬公升飛行,a 表示水平加速飛行,d 表示垂直俯衝飛行)。第二行中不允許出現多餘的字元(包括空白字元)。
例如:
輸入
0 1 75000 6 15000 75000
12 12 12 11 12 14
11 10 8 9 10 11
9 8 6 7 8 8
8 7 6 6 6 5
8 6 6 6 6 5
11 11 11 13 15
10 10 9 9 10
10 9 9 10 10
9 8 9 9 10
7 8 8 9 9
7 7 7 8 8
5 4 3 3 2
4 3 3 2 2
3 3 2 2 2
3 3 2 2 2
輸出
79raarrrraddrr
解題報告
光是看題目就讓人不想做。但仔細分析一下,其實就是乙個最短路的問題。那麼怎麼建模呢,這和平時的最短路有所不同。不妨把每乙個狀態當做乙個點,包含 高度與速度兩個引數,那麼,**裡的每乙個資料都相當於連線兩個狀態的一條邊,權值為時間。這樣最大也只會產生300個點。用堆優化的dijkstra完全可以勝任。
#include#define pair pair>#define maxn 300+10
#define maxm 90000+10
using
namespace
std;
intn,m,num,head[maxn][maxn],dis[maxn][maxn],vis[maxn][maxn],hm,dh,pre[maxn][maxn];
intans[maxn];
pair
s,t;
struct
edgeedge[maxm];
void add(pair from,pair to,int dis,int
n)void
dij()
}}int
main()
}for(int h=0;h<=m;h++)
}for(int h=2;h<=m;h++)
}dij();
printf(
"%d\n
",dis[t.first][t.second]);
for(int i=pre[t.first][t.second];i;i=pre[edge[i].from.first][edge[i].from
.second])
ans[++ans[0]]=edge[i].n;
for(int i=ans[0];i>=1;i--)
printf("\n
");return0;
}
2005 11 05 戰鬥記實
最近f上老人很少,好多老人都不怎麼上.所以lm bl之間的群體pk 很少出現.不過昨天是個特例.昨天回家剛家就發現氣氛不對,鐵堡裡人很多.而且看到很多幾個星期不見的朋友,見面第一句話就是 去打幽暗嗎?靠他們也不怕卡.根據以往經驗,lm基本就沒成功功進過幽暗城,最多在人家門口放放火.而且這個爛伺服器實...
飛機中的戰鬥機
網管員必讀 系列從書第2版再出新 網管員必讀 超級網管經驗談 第2版 該書第一版是暢銷 網管員必讀 系列叢書中業績最好的一本,受到了無數讀者的充分肯定和高度認可!該書第一版獲得了多項榮譽 具體參見我的另一篇博文 url 第二版相對第一版來說,內容更加豐富,篇幅由原來的640頁增加到了700頁,去掉了...
JS中的戰鬥機
好久沒寫部落格了!也不知道為什麼,最近想用js做個遊戲的衝動。先來看下截圖吧!這個遊戲的內容很簡單,玩家可以通過w a s d控制飛機的方向,按j可以發射子彈,然後不要被其他 撞到即可。由於遊戲的來自一些手機遊戲,並且是東拼西湊來的,所以畫面比較小。這個遊戲我用的是ext的基礎上做的,其實可以不用,...