看板 PHP 關於我們 聯絡資訊
我提供一個簡單的greedy演算法給你參考. 可以先假設沒有一個數大於你所設定的最大和M(如:100). 1.將原始資料由小到大排序. 假設排序好的陣列為S,而S[i]<=S[j] if i<=j. 2.選擇最大可選擇的數為第一個數.S[k] 3.選擇一個最大的y,使得y<k and S[y]+S[k]<=M. 4.選擇一個最大的x,使得x<y and S[x]+S[y]+S[k]<=M. 5.如果y,x存在,則S[k],S[y],S[x]即為其中一組解,將其儲存在你需要的地方, 並在S中刪去. 6.如果y,x不存在,則刪去S[k]. 7.回到2.,直到S為空集合為止. 實作的部份就自己試試看吧. 如果數目不大的話,就用最簡單的寫法就好了. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.90.149 ※ 編輯: zhman 來自: 140.112.90.149 (03/27 13:52)
litthe:嗯嗯~感謝 我試看看 :) 03/27 23:35