[已解決] SPOJ 1774. All Discs Considered [ALL]

看板Prob_Solve (計算數學 Problem Solving)作者 (十三)時間13年前 (2011/10/13 23:08), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
感謝兩位相關討論者,快速的做法正如板友所提。 建立adj list,計算最長adj path, 如果最長path分別來自兩個不同DVD,max adj path + 1 + 2 如果僅來自同一片DVD,max adj path + 2 眉角在於下面的圖 DVD1 XXXXXXXX OOOOOOOOOOOOOOOO XO DVD2 OOOOOOOO XXXXXXXXXXXXXXXX X代表一條path,O代表一條path,交叉於XO點。 那麼,不管是先算path X還是path O, 請用一個陣列位置把XO之後的長度記錄起來。 這樣跑到XO點時,就直接加上長度即可。 每次都跑到path最尾巴的話,很容易就TLE。 另外,像XXXXXXXX的每個X都在同一片DVD的話,長度是不用增加的,僅計算換片次數。 這是相關代碼,看不懂說明者就直接看程式碼吧~ http://pastie.org/2693308 ====================================================================== http://www.spoj.pl/problems/ALL/ 2片DVD,容量分別是N1和N2首歌,所以總共會有N1 + N2首歌。 給定第幾首歌和第幾首歌的前後順序(1 3代表第3首要在第1首之前), 試問:開始放入某片DVD的1次 + 其中交換片X次 + 最後拿出某片DVD的1次 總共會有幾次動作? 我想到的是topological sort,不過TLE。 無法從單純的數字關係想出什麼快速的解法,請教各位了。 先貼上TLE的code:http://pastie.org/2689400 現在嘗試DP解, wait... -- ※ 發信站 :批踢踢實業坊(ptt.cc) ◆ From: 114.25.246.54

10/13 23:12, , 1F
我猜是建出 DAG 後用 DP 算次數,O(n) 可完成。
10/13 23:12, 1F
thx, 我試試看。 ※ 編輯: bleed1979 來自: 114.25.246.54 (10/13 23:18)

10/14 02:58, , 2F
模擬題. 一開始兩片選一片放, 之後的動作全部固定
10/14 02:58, 2F

10/14 02:59, , 3F
各模擬一次取比較小的就是了
10/14 02:59, 3F
※ 編輯: bleed1979 來自: 114.25.246.54 (10/14 15:14)
文章代碼(AID): #1Ebly0jf (Prob_Solve)
文章代碼(AID): #1Ebly0jf (Prob_Solve)