3
有些學生希望通過向每個n
講座發送最少的學生人數來儘量減少他們的講座出席率。計算參加系列講座的學生的最低人數
- 講座
i
開始於時間a[i]
和時間結束b[i]
- 它需要
r[i][j]
時間從講座i
通勤講學j
是否有任何的算法來計算所需要的學生的最小數量參加所有講座?
有些學生希望通過向每個n
講座發送最少的學生人數來儘量減少他們的講座出席率。計算參加系列講座的學生的最低人數
i
開始於時間a[i]
和時間結束b[i]
r[i][j]
時間從講座i
通勤講學j
是否有任何的算法來計算所需要的學生的最小數量參加所有講座?
將類視爲圖中的節點。如果可以及時從講座i
到講座j
,則在圖中的節點對(i,j)
之間構建邊緣。圖的「根」節點是當天的第一類(在任何其他類到達該類之前結束的類)。
第一個關鍵的觀察是該圖是有向和無環的(你不能回到過去)。
您的目標是找到通過圖的路徑的最小數量,以便每個節點至少訪問一次。這立即導致了第二個關鍵的觀察,這是可以貪婪地完成的。
所以算法進行如下:
minNumStudents
查找DAG中最長的路徑很簡單納克動態規劃:
ordering
dist
與V
元素(節點的圖中的編號),初始化爲0
prev
與V
元件,將前一個節點存儲在路徑中Then
for each vertex `V` in `ordering`
for each edge (V,W)
dist[W] = min(dist[W],dist[V]+1)
prev[W] = V;
您最長的路徑在W
處結束,因此dist[W]
是最大值。最長的路徑可以使用prev
陣列通過從W
回溯來計算。
「最小流量下限」是什麼意思? – 2011-04-18 06:12:24
弄糊塗了?有什麼困惑呢?告訴我們你有多瞭解它,呃?就像「起初我認爲這只是最大的重疊問題,但後來我意識到,因爲學生們在非授課時間之間移動,所以我認爲這個想法打破了。任何方式來挽救它?「...如果你甚至不能開始考慮它,你有什麼機會了解解決方案? – bdares 2011-04-18 07:01:14
http://en.wikipedia.org/wiki/Flow_network – Andrey 2011-04-18 08:01:08