0 1揹包問題的四種方法

2021-10-01 09:18:31 字數 1119 閱讀 8309

0-1揹包問題

給定n個物品和乙個容量為c的揹包,物品i的重量是wi,其價值是vi,0-1揹包問題要求從這n個物品中,選擇裝入揹包的最優組合(物品不可以分割),使得裝入揹包中的物品的總價值最大。

例如,將8件物品放入容量為15的揹包,8件物品的重量和價值分別為:

w =

v =

對0-1揹包問題,可以設計多種貪心策略,如:

重量最輕的物品優先的貪心策略。

價值最大的物品優先的貪心策略。

單位價值最大的物品優先的貪心策略。

隨機選擇物品的貪心策略。

無法數學證明某一種策略的最優性,因此使用貪心法求解0-1揹包問題時,必須盡可能多地列舉各種貪心策略,並從各種貪心策略的執行結果中,找出問題的近似最優解。

#include 「pch.h」

#include

#include

#include

#include

#include

#include

#include"cmath"

#include"cstring"

using namespace std;

struct form ;

int bag=0, thingnum=0;

int cmppi(form a, form b) //按效益值從大到小排序

int cmpwi(form a, form b) //按重量從小到大排序

int cmpxi(form a, form b) //按比例從大到小排序

int suiji(form a, form b)

value(things); //按效益值

weight(things); //按重量值

speval(things); // 按比值

suijiji(things);

return 0;// 執行程式: ctrl + f5 或除錯 >「開始執行(不除錯)」選單

// 除錯程式: f5 或除錯 >「開始除錯」選單

01揹包四種方式實現

暴力遞迴 暴力列舉 param i 輸入規模 param capacity 揹包容量 return 揹包最大價值 public intforceknapsacksr int i,int capacity 每一件商品都被選擇完了 else if i 1 int p1 forceknapsacksr i...

揹包問題 四種解法解題

分別用蠻力法 動態規劃法 回溯法和分支限界法求解0 1揹包問題。注 0 1揹包問題 給定種物品和乙個容量為的揹包,物品的重量是,其價值為,揹包問題是如何使選擇裝入揹包內的物品,使得裝入揹包中的物品的總價值最大。其中,每種物品只有全部裝入揹包或不裝入揹包兩種選擇。1 基本思想 對於有n種可選物品的0 ...

PHP遞迴四種方法

data json data str replace data arr json decode data true print r arr dir foreach arr as k v header content type text html charset utf 8 print r arr p...