多重揹包問題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
publicclass
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必超時。優化多重揹包的優化 首先,我們不能用完全揹包的優化思路來優化這個問題,因為每組的物品的個數都不一樣,是不能像之前一樣推導不優化遞推關係的。詳情看下面引用...