1469 資料結構 簡單揹包問題

2022-08-31 02:15:13 字數 745 閱讀 2542

本題難點:簡單揹包問題遞迴程式的理解

簡單揹包問題

問題定義:

有乙個揹包重量是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為乙個有效的數字 則稱之為有界揹包問題.若可選擇次數無限,則稱之為無界揹包問題.所有的揹...