求解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 ...