假設有乙個揹包負重最多可達8公斤,求出使揹包所裝的物品價值之和最高的組合。假設所裝物品為水果,水果資訊如下,分別是水果的編號、名稱、重量、**:
揹包問題是乙個最優化的問題,計算機的最優化問題都可以用動態規劃,從空集合開始,每增加乙個元素就先求出該階段的最優解,知道所所有的元素加入集合
什麼是動態規劃呢?就是將問題分解為許多複雜度更小的子問題,而複雜度大的問題又可以利用子問題來簡化複雜度,進而起到了將複雜度降小的目的。
核心思路:需要求出1~8公斤每種容量的最優解,本質上動態規劃還是窮舉,只不過窮舉的有技巧,這是計算機不同於人的地方。此問題又叫0-1揹包,因為對於每一種水果,只有兩種狀態,放進揹包和不放進揹包
#include
#include
#include
#define limit 8
//揹包最大負重量
#define n 5
// 水果種數
#define min 1
// 最輕的水果
using namespace std;
typedef
struct node
fruit;
intmain()
;//初始狀態為0,不放水果
int item[limit+1]
=;int newvalue,p,coun=0;
fruit a=
,,,,
,};for
(int i=
0; i
)//依次放入水果}}
for(
int i=limit; i>=min; i = i-a[item[i]
].weight)
cout<
return0;
}
動態規劃 揹包問題
給定n個物品,重量是,價值是,包的容量 承重 是w 問,放入哪些物品能使得包內價值最大 1 需要將問題轉化為子問題,通過遞迴實現,且子問題必然與父問題存在關聯 2 定義v i,j 表示為,當item取自前i個items且揹包capacity j 時,揹包問題的最優解,也即最高的價值。3 從前i個it...
動態規劃 揹包問題
不廢話,直接上 動態規劃,揹包問題。輸入為 int n 物品的種類數。int n weight 各件物品的重量。int n value 各種物品的價值。int w 揹包最大的裝載重量。輸出 v n b 的值,最大的裝載價值。x n 各類物品的裝載數量。author huangyongye publi...
動態規劃 揹包問題
1 開心的金明 問題描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n 元。於是,他把每...