2017-05-27 90 views
-2

我的問題是:我需要一個算法,如果我有一些列表,按照特定的順序,我想找到一組值給我最高的總和。事實是,當我拿出一個價值時,它必須大於或等於最後一次採取的價值。舉個例子:找到一組數組中最高總和的算法

  • 列表1 {5, 10, 1}

  • 列表2 {9, 8}

  • 項目list3 {4, 4, 4, 4, 4}

正確的答案是{1, 5, 8, 9}

(其實我在第一個列表中取1和5,然後丟棄10,因爲如果我拿它,我不能取9和8,哪個總和大於10.我丟棄4,4,4,4,4,因爲如果我拿他們,我會放棄其他陣列中1和4之間的所有數字)。

我希望我能讓自己清楚。感謝您的幫助。

+1

作爲列表列表的輸入的意義是什麼?它可以是一個平面列表,而不是? – dasblinkenlight

+0

根據子列表的界限,輸入也可以是一個包含大量值的列表。例如{5,10,1,9,8,4,4,4,4,4}第一[0,3]秒[3,5]第三[5,9] – WalterNicholas

+0

我不明白你爲什麼需要一個但是第二個維度。對我來說,這個問題聽起來像是「找到一個總和最高的增加的子序列」。 – dasblinkenlight

回答

0

你可以用最長的增加的子序列算法的變化來解決這個問題。 LIS存儲迄今爲止發現的最佳長度,而您需要的算法將存儲迄今爲止採用的項目總和。在運行結束時,存儲在輔助數組中的最高總和將爲您的問題提供答案。