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