演算法(36) 揹包問題 01 C

2022-06-27 01:51:08 字數 1010 閱讀 5041

揹包問題指這樣一類問題,題意往往可以抽象成:給定一組物品,每種物品都有自己的重量和**,在限定的總重量內,我們如何選擇,才能使得物品的總**最高。

本文講的是最基本的01揹包問題。

有n件物品和乙個容量為v的揹包。第i件物品的費用(即體積,下同)是w[i],價值是val[i]。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

思路:從左到右

//揹包問題:從左往右

//weights 當前貨物的重量

//values 當前貨物的價值

//index 當前的貨號

//alreadyweight 0...index-1 已經做的決定,所形成的目前重量

//bag: 袋子的總重量

//int process(myvci weights, myvci values, int index, int alreadyweight, int bag)

if (index == weights.size()) //無貨//重量沒超

//1.不要當前的index貨物

int p1 = 0 + process(weights, values,index+1, alreadyweight,bag);

//2.要當前貨物,後續獲得的最大價值

//(當前貨物+ 後續得到的價值)

int p2next = process(weights, values, index + 1, alreadyweight + weights[index], bag);

int p2 = 0x7fffffff;

if (p2next != -1)//p2後續無效解

//return max(p1,p2);//兩個取乙個最大來

return p1 > p2 ? p1 : p2;

}int maxvalue1(myvci weights, myvci values, int bag)

void knapsack_main()

演算法(揹包問題 01揹包問題)

01揹包問題 有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n 行,...

演算法 0 1揹包問題

揹包問題是演算法中的乙個經典問題,它有很多子問題,比如0 1揹包問題,完全揹包問題,多重揹包問題等等。而今天所說的0 1揹包問題的原始描述為 現在有n件物品和乙個最大承載重量為m的揹包,要從這n件物品中選擇其中的k 1 k n 件,使得所選擇的物品的價值總和最大且其總重量不超過揹包的最大載重量。這n...

演算法 01揹包問題

對於乙個物品,選擇放還是不放,只有兩個選擇,故屬於01問題.物品 public class item 第n件物品,放入剩餘容量為leftweight的揹包中所獲得的最大價值 static int getmaxvalue listlist,int n,int leftweight 如果當前n的容量超過...