1 回答

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
為了使總和具有必需的屬性,可以找到總和盡可能接近總和一半的數(shù)組A的子集。
這是一種眾所周知的方法 subset sum problem
,可以通過動(dòng)態(tài)編程方法解決,方法是使用尺寸對(duì)應(yīng)于總和的附加數(shù)組(請注意數(shù)組Total
)。
請注意,問題的解決方案僅處理正數(shù),因此您必須對(duì)其進(jìn)行修改以使用負(fù)數(shù)(例如您的示例A[3] = -2
)。
此代碼使數(shù)組total
的長度變長,sum+1
并保存array中每個(gè)值的計(jì)數(shù)counts
。
在第一階段,代碼將所有可能總和的非整數(shù)項(xiàng)填充到總表中。考慮簡單的set value:count (2:3; 3:2)
。
第一輪以值3,2,1,0填充條目0,2,4,6。第二輪將所有非負(fù)條目更改為三分之二,并
從非負(fù)條目構(gòu)建鏈的遞減序列(例如4--> 4+3 ->4+6
)。在那之后,我們得到了總數(shù)組,[2,-1,2,1,2,1,2,1,0,1,0,-1,0]
其中負(fù)條目(不可能的總和)為1,11。請注意,這種方法不存儲(chǔ)信息-使用了哪些項(xiàng)目來產(chǎn)生所有可能的總和,因此您必須進(jìn)行更多的修改。
添加回答
舉報(bào)