簡體   English   中英

我們能用貪婪的策略解決這個問題嗎? 如果不是,我們如何使用動態編程解決這個問題?

[英]Can we solve this using a greedy strategy? If not how do we solve this using dynamic programming?

問題:

Siruseri市是無可挑剔的計划。 城市被划分為矩形的單元格,其中M行和N列。 每個牢房都有一個地鐵站。 有一列火車沿着每排左右運行,一條火車沿着每列從上到下運行。 每列火車在某個時間T開始,並且沿着它的路線(一排或一列)來回地往返。

普通列車需要兩個單位的時間才能從一個車站到另一個車站。 有一些快速列車只需要一個單位的時間從一個站到另一個站。 最后,有一些慢速列車需要三個單位時間才能從一個站點開始。 您可以假設任何站點的暫停時間可以忽略不計。 以下是3行4列地鐵系統的說明:

S(1) F(2) O(2) F(4)
F(3) . . . .
S(2) . . . .
O(2) . . . .

每行/每列開頭的標簽表示列車的類型(F表示快速,O表示普通,S表示慢)及其起始時間。 因此,沿着第1行行駛的火車是快速列車並且它在時間3開始。它從站(1,1)開始並向右移動,分別在時間3,4,5和6處沿着該行訪問站。 然后它在6,7,8和9時間從右到左返回站點。它現在再次移動,現在在9,10,11和12時間訪問站點,依此類推。 同樣,沿着第3列的列車是從時間2開始的普通列車。因此,從車站(3,1)開始,它在第3和第4列訪問第3列的三個站,返回到頂部列在6,8和10時間訪問它們,依此類推。

給定起始站,起始時間和目的地站,您的任務是確定使用這些列車到達目的地的最早時間。 例如,假設我們在時間8從站(2,3)開始,我們的目標是到達站(1,1)。 我們可以在時間8乘坐第二排的慢速列車,在時間11到達(2,4)。碰巧在第11列,第4列的快速列車在(2,4)向上行駛,所以我們可以乘坐這個快速列車到達(1,4)時間12.再次我們很幸運,在第12行第1行的快速列車是在(1,4),所以我們可以乘坐這個快速列車到達(1) ,1)在時間15,另一條路線是在第3欄從(2,3)在第3欄乘坐普通列車,在時間10到達(1,3)。然后我們在那里等到第13時間,然后乘坐第1排的快速列車向左行駛,在時間15到達(1,1)。您可以驗證沒有辦法比此更早到達(1,1)。

測試數據:您可以假設M,N≤50。
時間限制:3秒

由於N的大小,M非常小,我們可以嘗試通過遞歸來解決它。

在每個車站,我們乘坐兩列火車可以帶我們離目的地更近。
例如:如果我們想從2,3乘坐1,1,我們乘坐的火車更接近2,3,然后下到最近的目的地站,同時記錄我們的時間,如果我們到達目的地,我們記錄到目前為止的最短時間,如果到達目的地的時間少於最小值,我們會更新它。

我們可以使用這種方法確定火車在特定時間的哪個火車站:

/* S is the starting time of the train and N is the number of stations it
 visits, T is the time for which we want to find the station the train is at. 
T always be greater than S*/

T = T-S+1
Station(T) = T%N, if T%N = 0, then Station(T) = N;

這是我的問題:

  • 我們如何確定特定列車到達我們想要的方向的最早時間?

  • 由於我的上述算法使用貪心策略,它會給出准確的答案嗎? 如果沒有,那么我該如何解決這個問題呢?

PS:這不是作業,而是在線判斷問題

我相信貪婪的解決方案會在這里失敗,但構建反例會有點困難。

該問題意味着使用Dijkstra算法來解決。 邊緣是相鄰節點之間的連接,取決於列車的類型及其起始時間。 也不需要計算整個圖形 - 僅針對您正在考慮的當前節點計算邊緣。 我已經解決了許多類似的問題,這就是你解決的方法。 在我學會它之前,我還嘗試過幾次使用貪婪的東西。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM