我們還是直接拉題來看吧,本篇是一道入門題,照應標題,用來介紹該類問題的思路。
有 n種物品和乙個容量是 v
的揹包,每種物品都有無限件可用。
第 i
種物品的體積是 v**i,價值是 w**i
求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。
輸出最大價值。
輸入格式
第一行兩個整數,n,v
,用空格隔開,分別表示物品種數和揹包容積。
接下來有 n
行,每行兩個整數 v**i,w**i,用空格隔開,分別表示第 i
種物品的體積和價值。
輸出格式
輸出乙個整數,表示最大價值。
資料範圍
00輸入樣例
4 5
1 22 4
3 44 5
輸出樣例:10
好,以上就是原題,下面附上**和思路。
# include
intmain
(void
)int dp[n]
[v+1];
//該處陣列含義 dp[5][6]表示前6種物品 在體積為6的揹包中能裝得最大價值
for(i =
0;i <= v;
++i)
}int j;
for(i =
1;i < n;
++i)
}printf
("%d"
,dp[n-1]
[v])
;return0;
}
下面在來一段優化的**:一維陣列的實現
# include
# define x 10000
int dp[x]
;int
main
(void
)for
(i =
0;i <= v;
++i)
}int j;
for(i =
1;i < n;
++i)
}printf
("%d"
,dp[v]);
return0;
}
完全揹包 動態規劃
描述 直接說題意,完全揹包定義有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的體積是c,價值是w。求解將哪些物品裝入揹包可使這些物品的體積總和不超過揹包容量,且價值總和最大。本題要求是揹包恰好裝滿揹包時,求出最大價值總和是多少。如果不能恰好裝滿揹包,輸出no輸入 第一行 n 表示...
完全揹包 動態規劃
題目 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。放入第i種物品的費用是ci,價值是wi,求解 將哪些物品裝入揹包,可使這些物品耗費的費用和不超過揹包容量,且價值總和最大。分析 一 建立狀態方程 可以轉化為01揹包問題求解 dp i v 表示前i件種物品放入容量為v的揹包的最大價值,則有...
動態規劃揹包問題 完全揹包
問題描述 有n種物品,每種均有無窮多個。第i個物品的體積為vi,重量為wi。選一些物品裝到容量為c的揹包中,使得揹包內物品在總體積不超過c的前提下重量盡量大。問題分析 開乙個陣列f i j 表示前i種物品中選取若干件物品放入剩餘空間為j的揹包中所能得到的最大重量。每種物品無窮個,所以還要有乙個k遍歷...