在一些揹包問題中要求會從不超過揹包最大容量變為恰好裝滿揹包,與前者的差別在於初始化的不同
合理運用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。求解將哪些物品裝入揹包可使這些物品的體積總和不超過揹包容量,且價值總和最大。本題要求是揹包恰好裝滿揹包時,求出最大價...