多重揹包問題II

2021-09-08 11:51:36 字數 1205 閱讀 2475

多重揹包問題ii

總體積是m,每個小物品的體積是a[i] ,每個小物品的數量是b[i],每個小物品的價值是c[i]

求能夠放入揹包內的最大物品能夠獲得的最大價值

和上乙個很類似

上一題體積就是價值,這裡的價值是單獨定義了

狀態轉移方程

不放a[i]

f[i][j] =f[i-1][j]

放a[j]

可放多個設為k,

k = min(j/a[i],b[i])

f[i][j] = f[i-1][j- ki*a[i]] + ki*c[i] 0<=ki<=k 取最大值

完全揹包問題時候:0<=ki*a[i]<=m

public

class

solution

k--;}}

else

p[j] =math.max(p[j],p[j]);}}

return

p[m];

}/*** 多重揹包問題

* 總體積是m,每個小物品的體積是a[i] ,每個小物品的數量是b[i]

* *

@param

m: an integer m denotes the size of a backpack

* @param

a: given n items with size a[i] 0 開始的 a是

* @return

: the maximum size

*/public

int backpack1(int m, int a,int b ,int

c) k--;}}

else

p[i+1][j] = math.max(p[i][j],p[i+1][j]);}}

return

p[a.length][m];

}public

static

void

main(string args);

int b=new

int;

int c=new

int;

int sum = new

solution().backpack(m, a,b,c);

system.out.println(sum);

}}

10:45

100:55

多重揹包問題 II

有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行三個整數 vi...

多重揹包問題 II

有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行三個整數 vi...

多重揹包問題 II

原題鏈結acwing5 基本思考框架 思路和多重揹包問題i一樣,但這題的資料範圍變成1000了,非優化寫法時間複雜度o n 3 接近 1e9必超時。優化多重揹包的優化 首先,我們不能用完全揹包的優化思路來優化這個問題,因為每組的物品的個數都不一樣,是不能像之前一樣推導不優化遞推關係的。詳情看下面引用...