Problem
金融交易,它們希望賣出、買進交易結束後的差為零。
意即將數字分兩堆的結果相同。
Sample Input
|
|
Sample Output
|
|
Solution
由於保證 0 < a[i] <= i
,基於這一點,可以發現到只考慮一個數字 a[1]
時,必然可以湊出 1 - a[1]
,當考慮第 i 大數字時,保證前 i - 1 個數字可以湊出 1 ~ (i-1)
,加上第 i 個數字必然可以湊出 1 ~ (i-1)+a[i]
(1, 2, 3, ..., i-1, a[i], 1+a[i], ..., i-1+a[i]
)。
而事實上,可以湊出所有的 1 ~ sum[i]
,根據遞歸是可以證明的。只要總和是偶數,必然可以劃分成總和相同的兩堆。排序一下,從大的數字開始挑,貪心去完成目標的總和。
|
|