Problem
有 N 個箱子,每個箱子都有 M 顆球,每一個箱子的黑、白球分配的個數不同,希望分成兩堆,每一堆必須有 N/2 個箱子,並且要符合黑球、或白球必須在兩堆佔有多數 (> 50%) 的情況。
假設佔有的比例分別為 m1, m2,最大化 min(m1, m2)
。
Sample Input
|
|
Sample Output
|
|
Solution
N 很大,M 也很大。一開始就目測需要 random 的隨機交換法,這樣湊出答案的機率是挺高的。
當然這有點不靠譜,使用 dp 背包問題,由於狀態數量太多,必須使用 set 壓縮。
dp[i][j]
表示放置前 i 個箱子,存在 j 個數的球。
統計兩色的球總個數,個數多的必然是最後佔有多數,決定球顏色後,針對個數進行背包問題的計算,由於每個箱子的球總數一樣,分成兩堆時,分母是固定的,因此可以無視另一個顏色的存在。
|
|