下面來看**:
#include
#include
#include
#include
using
namespace std;
// 01揹包解法1
// 01揹包二維陣列的是順序的** f[i][j] 代表前i個物品 揹包裝了重量為j的物品的最大利潤
intbag_01
(int f[7]
[13],
int cost,
int v,
int ba**,
int size)
}return f[5]
[ba**];}
// 01揹包解法2
// 01揹包問題改進
intbag_better
(int f,
int cost,
int v,
int ba**,
int size)
}return f[ba**];}
// 完全揹包解法1
// 完全揹包問題就是加了乙個迴圈
//完全揹包在選第i種物品時,容積夠用情況下,可能有2種以上狀態可選,放1個,或者2個,3個,無限,或者不放。找出最大價值的選擇
intbag_wanquan
(int f,
int cost,
int v,
int ba**,
int size)}}
return f[ba**];}
// 完全揹包解法2
intbag_wanquan2
(int f,
int cost,
int v,
int ba**,
int size)
}return f[ba**];}
//多重揹包問題 放的數量有限制num[i]
intbag_multi
(int f,
int cost,
int v,
int ba**,
int num,
int size)}}
return f[ba**];}
intmain()
;// 每個物品的花費
int v[5]
=;// 相對應的物品所占用的體積
int num[6]
=;// 多重揹包問題,每個物品的數量
int size =
sizeof
(cost)
/sizeof
(int);
// 物品的數量
int f[7]
[13]=
;// 01揹包二維陣列的初始化
int f2[13]
=;// 01揹包方法2中用到的一維陣列的初始化
int f3[13]
=;// 完全揹包和多重揹包中用到的一維陣列的初始化
int ba** =12;
// 揹包的容量
int bag_01 =
bag_01
(f, cost, v, ba** ,size)
; cout <<
"01揹包問題: "
<< bag_01
bag_better
(f2, cost, v, ba** ,size)
; cout <<
"01揹包優化問題: "
<< bag_02 << endl;
int bag_wanquan =
bag_wanquan
(f3, cost, v, ba**, size)
; cout <<
"完全揹包問題: "
<< bag_wanquan << endl;
int bag_wanquan2 =
bag_wanquan2
(f3, cost, v, ba**, size)
; cout <<
"完全揹包問題2: "
<< bag_wanquan << endl;
int bag_multi =
bag_multi
(f3, cost, v, ba**,num, size)
; cout <<
"多重揹包問題: "
<< bag_multi << endl;
return0;
}
參考部落格: 揹包 01揹包,完全揹包,多重揹包
哈哈 01揹包 f i v max 完全揹包 f i v max 多重揹包 f i v max include include include include include define maxn 1000 using namespace std int n,cap int w maxn 重量 花...
01揹包 完全揹包 多重揹包
01揹包 zeroonepack 有n件物品和乙個容量為v的揹包,每種物品均只有一件。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。include include includeusing namespace std const int n 1000 10 int ...
01揹包 完全揹包 多重揹包
01揹包 zeroonepack 有n件物品和乙個容量為v的揹包。每種物品均只有一件 第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。完全揹包 completepack 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的費用是c i 價值是w i 求...