多重部分和問題

2021-10-09 09:08:38 字數 779 閱讀 2797

問題描述:

問題分析:

假設陣列中存在n個數字,要能夠從這n個數字中拿出一部分數使得和為k,那麼需要滿足的是能夠從n-1個數字中拿出一部分數使得和為k-m*a[n-1] (0<=m<=m[n-1]).

綜上我們可以得到如下dp方程:

bool dp[i,j] : 表示從前i個數字中能否找出若干個數使其和為j。

dp[i,j]=dp[i-1,j-m*a[i-1]]==true 其中:(0<=m<=m[i-1])

private

bool[,

] dp;

///

/// 多重部分和問題

/// dp[i,j] 是否能從前i個資料中找出和為j的 值義域(true-1,false-0)

///

///

///

///

///

public

bool

multiplepartialsum

(int k,

int[

] a,

int[

] m)

if(temp <0)

break

;for

(int z=

1;z<=i-

1;z++)}

}}}return dp[a.length,k]

;}

多重部分和問題

有 n 種物品,第i種物品的每個物品的價值是 ai 數目是 mi 判斷是否可以選擇若干數字使得價值和是k。1 n 100 1 ai,m i,10 5 1 k 105 看作揹包大小是k,物品的價值和體積都是ai 物品數目是 mi 的多重揹包。如果最大價值是 k 的話就是可以選出,否則便是不能選出。利用...

多重部分和問題

有n種不同大小的數字a i 每種各m i 個。判斷是否可以從這些數字之中選出若干使它們的和恰好為k。dp i 表示以a i 為末尾的最長上公升子串行的長度。include include include includeusing namespace std define maxn 10010 int...

多重部分和問題

有n種不同大小的數字a i 每種各m i 個。判斷是否可以從這些數字中選出若干使它們的和恰好為k。限制條件 1 n 100,1 a i m i 100000,1 k 100000 這個問題可以用dp求解,如何定義遞推式影響最後的時間複雜度。定義dp i 1 j 用前i 1種數字 數字的編號是從0到i...