完全揹包問題

2021-10-06 06:06:47 字數 2523 閱讀 6557

有 n 種物品和乙個容量是 v 的揹包,每種物品都有無限件可用。

第 i 種物品的體積是 vi,價值是 wi。

求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。

輸出最大價值。

輸入格式

第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。

接下來有 n 行,每行兩個整數 vi,wi,用空格隔開,分別表示第 i 種物品的體積和價值。

輸出格式

輸出乙個整數,表示最大價值。

資料範圍

0i,wi≤1000

輸入樣例

451

2243

445

輸出樣例

10
繼01揹包以後,這個題的區別就是每個物品可以無限用。

我們可以按照第i個物品用了多少個來劃分。

那麼我們有兩個狀態:

1.不含i,則為f[i-1,j].

2.含i,並且用了k個第i個物品。

則狀態轉移方程:

f[i,j]

=max

(f[i,j]

,f[i-

1,j-k*v[i]

]+k*w[i]

)

那麼我們就可以寫出**:

#include

#include

#include

#include

#include

#include

typedef

long

long ll;

using

namespace std;

const

int maxn =

1000+10

;int n,m;

int v[maxn]

,w[maxn]

;int f[maxn]

[maxn]

;int

main()

}} cout << f[n]

[m];

return0;

}

現在是三維,我們可以優化成二維。

我們寫一下方程:

f[i,j]

=max

(f[i-

1,j]

,f[i-

1,j-v]

+w,f[i-

1,j-

2v]+

2w,f[i-

1,j-

3v]+

3w,...

....

..)f[i,j-v]

=max

( f[i-

1,j-v]

, f[i-

1,j-

2v]+w, f[i-

1,j-

3v]+

2w,...

....

.)

那麼我們可以驚奇的發現f[i,j]可以優化為:

f[i,j]

=max

(f[i-

1,j]

,f[i,j-v]

+w)

那麼**為:

#include

#include

#include

#include

#include

#include

typedef

long

long ll;

using

namespace std;

const

int maxn =

1000+10

;int n,m;

int v[maxn]

,w[maxn]

;int f[maxn]

[maxn]

;int

main()

} cout << f[n]

[m];

return0;

}

那麼我們類似01揹包,可以用滾動陣列優化為一維,我們可以直接去掉i,這時候j不用逆序,因為我們從上面的結論得知:f[i][j]是從i轉移過來的,而不是從i-1轉移過來的。

#include

#include

#include

#include

#include

#include

typedef

long

long ll;

using

namespace std;

const

int maxn =

1000+10

;int n,m;

int v[maxn]

,w[maxn]

;int f[maxn]

;int

main()

} cout << f[m]

;return0;

}

揹包問題(完全揹包)

1.矩陣鏈乘法 2.投資組合問題 3.完全揹包問題 4.01揹包問題 5.最長公共子串行 乙個揹包,可以放入n種物品,物品j的重量和價值分別為,如果揹包的最大重量限制是b,怎麼樣選擇放入揹包的物品以使得揹包的總價值最大?組合優化問題,設表示裝入揹包的第j個物品的數量,解可以表示為。那麼目標函式和約束...

完全揹包問題

這個是從ppt上弄過來的。完全揹包問題 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。放入第i種物品的耗費的空間是ci,得到的價值是wi。求解 將哪些物品裝入揹包,可使這些物品的耗費的空間總和不超過揹包容量,且價值總和最大 基本思路 這個問題非常類似於01揹包問題,所不同的是每種物品有無限...

完全揹包問題

設有n種物品,每種物品有乙個重量及乙個價值。但每種物品的數量是無限的,同時有乙個揹包,最大載重量為m,今從n種物品中選取若干件 用乙個物品可以多次選取 使其重量的和小於等於m,而價值的和為最大。輸入有多組資料,對於每組輸入資料第1行 兩個整數,m 揹包容量,m 200 和n 物品數量,n 30 第2...