dp問題系列-資源型(一)01揹包
dp問題系列-資源型(二)完全揹包
dp問題系列-資源型(三)多重揹包
dp問題系列-資源型(四)分組揹包
分組揹包問題概述
有n組物品和乙個容量是 v的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij,價值是 wij,其中 i是組號,j是組內編號。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。輸出最大價值。分析
則狀態轉移方程為:
for k=
1;k<=s[i]
;k++
//第i組有s[i]件物品
f[i]
[j]=
max(f[i-1]
[j],f[i-1]
[j-v[i]
[k]]
+w[i]
[k])
;
ac**(樸素版)
注意f[i][j] = f[i-1][j];不能放在k的迴圈內,否則會被覆蓋值。
//樸素版
#include
#include
#include
using
namespace std;
const
int n=
110;
int n,m;
int v[n]
[n],w[n]
[n],s[n]
;int f[n]
[n];
intmain()
}for
(int i=
1;i<=n;i++)}
} cout<
[m];
return0;
}
優化版
降維到一維,注意j的遍歷時從大到小的;
此外,其實這裡只能優化空間複雜度,時間上與樸素版無差。
#include
#include
#include
using
namespace std;
const
int n=
110;
int n,m;
int v[n]
[n],w[n]
[n],s[n]
;int f[n]
;int
main()
}for
(int i=
1;i<=n;i++)}
} cout<
;return0;
}
分組揹包 Acwing 9 分組揹包問題
題目鏈結 有 n 組物品和乙個容量是 v 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行有兩個整數 n,v,用空格隔...
揹包問題彙總2(分組揹包,揹包問題求方案數)
揹包問題上加一層迴圈就可以了,最外層控制第幾組,最內層迴圈依此遍歷第i組所有物品的資訊。樣例題目 有 n 組物品和乙個容量是 v 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。求解將哪些物品裝入揹包,可使物品總體積...
hdu 1712 分組揹包問題
1y很開心。分組揹包就是在01揹包的基礎上分了多個組,每組只能取乙個。這樣在01揹包上再加一重迴圈就可以了。二維的狀態轉移方程 f k,v max 揹包九講的偽 如下 for k 1 to k for v v to 0 for item i in group k f v max 就是先進行每組的遍歷...