題目大意
有n人、m題。每人做對每題的概率給定。需分配題目使總期望做對數最大。限制:前k題中,任兩人做題數差≤1(即前n題必須均勻分配)。求最大期望值。
建模思路:最小費用最大流
- 將「期望做對數最大」轉化為「費用最小」:對每條邊取負概率作為cost,跑最小費用流,最終取負即得最大期望。
- 均勻分配限制:前n題每人必做一題 → 可構建分層網絡,或對前n題單獨建圖保證完美匹配,其餘題接入同一流網絡。
- 源點S連向每人節點,容量1費用0;人連向題,容量1費用=-prob;題連向匯點T,容量1費用0。
- 對於前n題的均勻限制,可引入中間層或按輪次展開圖。
算法選擇:SPFA vs Dijkstra+劃分
- SPFA:可直接處理負權邊,代碼簡單,適合負費用場景。
- Dijkstra+劃分:需費用非負,需Johnson劃分轉換,實現較繁瑣。
- 本題費用為負概率,推薦SPFA尋找最短增廣路。
代碼框架(關鍵結構)