簡體   English   中英

子集總和為負數

[英]Subset sum with negative numbers

因此,我有n個正整數(c_1,...,c_n)的給定集合C。 任務是找到C的兩個子集A和B,其中A僅包含正數,而B僅包含C中數字的負數。然后,兩個子集A和B的總和應為數字d(d總是積極的)。 我需要找出是否有兩個這樣的子集,如果有,它們包含哪些數字。

For example: {3, 5, 6, 13, 24} // d = 12 => solution: true: {5, 13} {-6}

我知道這是子集總和問題的一種變體,我已經看到了類似問題(具有負數的子集總和)的一些解決方案,但是我需要使用動態編程來解決該問題。 我見過的大多數解決方案都適用於遞歸,而不適用於DP。

我想我需要一個大小為(n * n * d)的3D布爾表S(i,j,k)。 但是S(i,j,k)何時為真,何時為假? 因為我總是需要檢查所有可能的方法來使用k數來計算總和,所以它們可以是正數也可以是負數(例如:對於4個數字{1,2,3,4},有2 ^ 4種排列方式他們:1 + 2 + 3 + 4,1-2 + 3 + 4,1-2-3 + 4,...,-1 + 2-4-1-4-3-4)

我的想法是否正確,或者我已經做錯了事?

一種方法是在由(c_1,c_2,...,c_n,-c_1,-c_2,...,-c_n)組成的集合上使用標准動態規划子集和算法。

這將找到一個總和為d的子集(或證明不存在)。

將A設置為子集中的所有正數,將B設置為所有負數。

您可能還希望刪除A和B中都出現的任何數字(例如,如果A中有3,而B中有-3,則可以在不更改總和的情況下刪除兩者)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM