本題難點:簡單揹包問題遞迴程式的理解
簡單揹包問題
問題定義:
有乙個揹包重量是s,有n件物品,重量分別是w0,w1...wn-1
問能否從這n件物品中選擇若干件放入揹包中使其重量之和正好為s
揹包問題遞迴版本
解釋:其選擇只有兩種可能,選擇一組物品中包含wn-1 ,此時knap(s,n)的解就是knap(s - wn-1,n-1)的解
如果選擇的物品中不包括wn-1,這樣knap(s,n)的解就是knap(s,n-1)的解
knap(s,n) = true, 當 s=0時
knap(s,n) = false ,當s < 0 或者 s > 0 且 n < 1
knap(s,n) = knap(s - wn-1,n-1) || knap(s,n-1) 當s>0且n>=1
//測試用例:
//20 5
//1 3 5 7 9
//23 5
//1 3 5 7 9
//20 5
//1 3 5 7 13
#include
using
namespace
std;
bool knap(int s, int n, int
w)
else
return knap(s, n - 1
, w);
}int
main()
}
資料結構 揹包問題
演算法的經典問題之一揹包問題,揹包問題是動態規劃 運籌學 的乙個典型的例子,它的問題描述即規定揹包所能容納的最大重量,然後此時有一批物品對應不同的質量和價值,那麼如何放置物品進入揹包使得揹包中的價值最大。通常情況下,揹包問題會分為兩種情形 前一種情況,只能用貪心演算法解決去解決問題。後一種情況,則需...
簡單揹包問題
設有乙個揹包可以放入的物品重量為s,現有n件物品,重量分別是w1,w2,w3,wn。問能否從這n件物品中選擇若干件放入揹包中,使得放入的重量之和正好為s。如果有滿足條件的選擇,則此揹包有解,否則此揹包問題無解。input 輸入資料有多行,包括放入的物品重量為s,物品的件數n,以及每件物品的重量 輸入...
簡單揹包問題
有乙個容量為v的揹包,從n件物品中選擇一些放入揹包中,每件物品的重量為w i 為v i 怎麼選擇合適的物品使得揹包內物品的總價值最大.這個問題中每個物品可供選擇的次數是0或1.即簡單揹包問題.若可選擇次數為n n為乙個有效的數字 則稱之為有界揹包問題.若可選擇次數無限,則稱之為無界揹包問題.所有的揹...