看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《friendever (michael)》之銘言: : → Schottky:我找到方法了,出乎意料地簡單 =.= : → azureblaze:可惜推文長度寫不下 : → Schottky:先取一個積分最高的,再尋找下一個候選人讓兩數總積分最高 : → Schottky:如此一個一個找,複雜度只有O(n^2) : → cismjmgoshr:(3,3)(1,6)(6,1)選2組,樓上作法碰到這組會有什麼結果? : → Schottky:k=2時會出槌沒錯,但是n和k都很大的時候,Σx>>x,Σy>>y : → Schottky:此時就不會出現你說的情形了 我在考慮一個 worst case: 令 n = 2m+1, m 是正整數, 資料是: (500,500) (1000,0) (0,1000) (1000,0) (0,1000) (1000,0) (0,1000) ..... 沒有說不能重複, 所以就讓 (1000,0) (0,1000) 這一對活寶重複到底 當 k 是奇數時, 最佳組合是 (500,500) 和各 (k-1)/2 個 (1000,0) 及 (0,1000) 這個狀況用我提的方法沒有問題。 當 k 是偶數時, 最佳組合是各 k/2 個 (1000,0) 及 (0,1000), 從頭到尾都不該選 (500,500) 但用我的方法, 不管前面怎麼改良, 假如前 2x 步都沒有選到 (500,500), 在第 2x+1 步時選 (500,500) 的積分永遠還是比選 (1000,0) 多 2500 分... (1000x+500)*(1000x+500) - (1000x+1000)*(1000x+0) = (1000000x^2+1000x+2500) - (1000000x^2+1000x+0) = 2500 所以我說當 k 夠大時就沒問題... 其實在這個 special case 還是有點小問題... 不過我覺得這個思考方向還是很有前途的。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.137.8.240