多重部分和問題

2021-07-05 02:35:29 字數 687 閱讀 7824

有 n 種物品,第i種物品的每個物品的價值是 ai

,數目是 mi

。判斷是否可以選擇若干數字使得價值和是k。1≤

n≤100 1≤

ai,m

i,≤10

5 1≤

k≤105

看作揹包大小是k,物品的價值和體積都是ai

,物品數目是 mi

的多重揹包。如果最大價值是 k 的話就是可以選出,否則便是不能選出。

利用二進位制分解,可以使時間複雜度達到o(

k∑lo

g2mi

) 。

大約有

1.7×108

,顯得略大。

設 dp[i][j] 表示前 i 種數字組合成 j 之後,至多剩餘的 ai

的個數。

那麼: dp

[i][

j]=⎧

⎩⎨mi

,−1,

dp[i

][j−

ai]−

1,dp

[i−1

][j]

>0j

ordp

[i][

j−ai

]≤0o

ther

wise

dp[n][k

]≥0 說明可以取出,否則即不可以。o(

nk) ,大約是107

多重部分和問題

有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...

多重部分和問題

1149 多重部分和問題 時間限制 1 sec 記憶體限制 128 mb 提交 25 解決 6 提交 狀態 討論版 題目描述 有n中不同大小的數字ai,每種各mi個。判斷是否可以從這些數字之中選出若干使他們的大小恰好為k.限制條件 1 n 100 1 ai,mi 100000 1 k 100000 ...