房間數 n ≤ 10,逃生時間 t ≤ 1e6。每個房間有寶石,從起點 s 出發,必須在 t 秒內到達終點 e,求能收集的最大寶石數。若無法按時到達輸出 0。
dp[mask][i] 表示已訪問房間集合為 mask、當前位於房間 i 所需的最短時間。狀態數 2^n * n ≤ 10240,極小。
dp[1<,其餘設為 INF。(mask, i) 嘗試走向未訪問的鄰居 j,新時間 nt = dp[mask][i] + dist[i][j]。若 nt ≤ t 且 nt < dp[mask|1<,則更新並繼續搜索。 mask,若 dp[mask][e] ≤ t,計算該 mask 對應的寶石總和,取最大值。long long 存寶石數與時間,防溢出。狀態壓縮 DP 是小規模圖中帶約束路徑問題的利器,本題結合時間限制與收益最大化,屬於經典模板題。