dp問題系列 資源型(四)分組揹包

2021-10-05 18:18:40 字數 1405 閱讀 4283

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 就是先進行每組的遍歷...