揹包問題(動態規劃)

2021-10-02 06:22:20 字數 1005 閱讀 8711

假設有乙個揹包負重最多可達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 元。於是,他把每...