動態規劃中揹包 裝滿問題

2021-09-28 23:15:39 字數 1033 閱讀 6779

在一些揹包問題中要求會從不超過揹包最大容量變為恰好裝滿揹包,與前者的差別在於初始化的不同

合理運用inf:

把dp[maxn]全賦值為inf

dp[0]=0;

如果dp[n]>0,則在容量為n時,揹包無法裝滿。

恰好裝滿的dp[n]有乙個具體值,而不是inf

為什麼要這麼做呢?

通過畫圖製表可以得出,有些位置上的值並不是從dp[0]位置推到出來的,有可能其末尾最後dp[n]就不是推導出來的,所以在那個狀態下他並沒有塞滿,所以他仍然是inf

memset

(dp,inf,

sizeof

(dp));

dp[0]=

0;

當不需要揹包恰好裝滿時:dp陣列初始化的值全為0。

例題:hdu1114這個就是乙個完全揹包求是否恰好裝滿情況的題

#include

#include

#include

#define max_n 502

#define max_w 10002

#define inf (1 << 20)

using

namespace std;

int dp[max_w]

, w[max_n]

, v[max_n]

;int w;

intmain()

dp[0]

=0;for

(int i =

1; i <= w; i++

)for

(int i =

0; i < n; i++)}

if(dp[w]

< inf)

else

}system

("pause");

return0;

}

01揹包中是否揹包裝滿問題

揹包 有n 種不同的物品,每個物品有兩個屬性,v體積,c價值,現在給乙個體積為 m 的揹包,問 最多可帶走多少價值的物品。狀態轉移方程 dp i j max dp i 1 j dp i 1 j v i c i dp i 1 j 表示不放第i件物品的最大價值,dp i 1 j v i c i 表示放第...

01揹包中揹包裝滿和不裝滿

揹包 有n 種不同的物品,每個物品有兩個屬性,v體積,c價值,現在給乙個體積為 m 的揹包,問 最多可帶走多少價值的物品。狀態轉移方程 dp i j max dp i 1 j dp i 1 j v i c i dp i 1 j 表示不放第i件物品的最大價值,dp i 1 j v i c i 表示放第...

完全揹包(裝滿)模板

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 直接說題意,完全揹包定義有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的體積是c,價值是w。求解將哪些物品裝入揹包可使這些物品的體積總和不超過揹包容量,且價值總和最大。本題要求是揹包恰好裝滿揹包時,求出最大價...