問題描述
給定n個重量為、價值為的物品和乙個容量為c的揹包,0/1揹包問題是求解這些物品中的乙個最有價值的子集,並且要能夠裝到揹包中。
**
#include
using
namespace std;
int n;
//表示物品的總數
int m;
//表示揹包承重
int ans =0;
//表示最優可行子集的物品數量
int r[50]
;//r用來記錄該子集的物品編號及價值
int temp_w =
0, temp_v=0;
//定義乙個結構體
struct goods //goods表示乙個物品
a[100];
// 記錄當前子集,返回該子集物品數量
intget
(int temp_v)
return count;
}// 計算最優解
void
fun(
int x)
}int
main()
fun(0)
; cout <<
"最大總價值:"
; cout << r[0]
<< endl;
return0;
}
演算法(揹包問題 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的容量超過...