求解0 1揹包問題 蠻力法即暴力演算法實現

2021-10-05 06:55:44 字數 1013 閱讀 8189

求解0/1揹包問題

【問題描述】 有n個重量分別為的物品,它們的價值分別為,給定乙個容量為w的揹包,實際從這些物品中選取一部分物品放入該揹包的方案,每個物品要麼選中要麼不選中,要求選中的物品不僅能夠放到揹包中,而且要具有最大的價值。

【問題求解】對於n個物品、容量為w的揹包問題,採用前面求冪集的方法求出所有物品組合。

對於每一種組合,計算其總重量sumw和總價值sumv,當sumw小於w時,該組合式一種解,並通過比較將最佳方案儲存在maxsumw和maxsumv中,最後輸出所有解和最佳解。

**實現:

#include

#include

using

namespace std;

vectorint>

> ps;

//用於存放冪集

void

pset

(int n)

}void

knap

(int w,

int v,

int w)

printf

("}\t\t%d\t%d "

,sumw,sumv);if

(sumw<=w)

}else

printf

("否\n");

count++;}

printf

("最佳方案為: ");

printf

("選中物品");

printf

(",");

printf

("總重量:%d,總價值:%d\n"

,maxsumw,maxsumv);}

intmain()

;int v=

;pset

(n);

printf

("0/1揹包的求解方案\n");

knap

(w,v,w)

;return0;

}

蠻力法求解0 1揹包問題C

先佔坑 include include 以下三個庫用於計算程式運算時間 include include include using namespace std define n 100 struct goods int n,bestvalue,cv,cw,c 物品數量,價值最大,當前價值,當前重量,...

暴力法求解01揹包問題

這段 只是使用暴力法解決了01揹包問題,但是沒有經過優化,效率不高。使用暴力法的原因只是因為作業需求,請勿評價。主要的難點在於使用c語言列出乙個陣列的所有子集。使用了遞迴的方法,將每次的計算都歸併為二個元素,這樣就能夠簡化問題。main.c backpack created by shadowdai...

0 1揹包問題(蠻力法)

用蠻力法解決0 1揹包問題 例子輸入 4 6 5 43 4 2 31 1輸出 10 6 8 include include using namespace std intmain int w 5 v 5 int max 0 每輪最大價值 int max1 0 最終最大價值 int weight 0 ...