01揹包
先輸入總容納量m 再輸入物品數量n
下面n行先輸入每個物品的質量和價值
#include
#include
#include
using
namespace std;
int m,n,w[
100001
],c[
100001
],f[
100001];
intmain()
完全揹包
先輸入總容納量m 再輸入物品數量n
下面n行先輸入每個物品的質量和價值
#include
#include
#include
using
namespace std;
int m,n,w[
100001
],c[
100001
],f[
100001];
intmain()
分組揹包
先輸入總容量m再輸入物品總個數n再輸入最大的分組數
接下來n行
每行先輸入每個物品的質量,價值和所在的組別
#include
#include
#include
using
namespace std;
int m,n,t,w[
1001
],c[
1001
],a[
1001][
10001
],f[
10001];
intmain()
for(
int i=
1;i<=t;i++
)for
(int j=m;j>=
0;j--
)for
(int k=
1;k<=a[i][0
];k++)if
(j>=w[a[i]
[k]]
) f[j]
=max
(f[j]
,f[j-w[a[i]
[k]]
]+c[a[i]
[k]]);
printf
("%d\n"
,f[m]);
return0;
}
多重揹包
先輸入總容量m再輸入物品總個數n再輸入最大的分組數
接下來n行
每行先輸入每個物品的質量,價值和能夠取得最大個數(0…s[i])
#include
#include
using
namespace std;
int m,n,w[
100001
],c[
100001
],s[
100001
],f[
100001];
intmain()
二維揹包
第一行三個整數,n,v,m,用空格隔開,分別表示物品件數、揹包容積和揹包可承受的最大重量。
接下來有 n 行,每行三個整數 vi,mi,wi,用空格隔開,分別表示第 i 件物品的體積、重量和價值。
#include
#include
#include
using
namespace std;
int m1,m2,n,w1[
1001
],w2[
1001
],c[
1001
],f[
1001][
1001];
intmain()
printf
("%d"
,f[m1]
[m2]);
return0;
}
對於揹包的方案數求解
完全揹包:
#include
#include
#include
using
namespace std;
int m,n,w[
100001
],c[
100001
],f[
100001];
intmain()
01揹包:
#include
#include
#include
using
namespace std;
int m,n,w[
100001
],c[
100001
],f[
100001];
intmain()
揹包問題模板彙總
完全揹包 多重揹包 混合揹包 揹包問題 knapsack problem 是一種組合優化的np完全問題。它是在1978年由merkel和hellman提出的。問題的描述為 有乙個揹包,最多放m kg的物體 物體大小不限 有n個物體,每個物體的重量為wi,每個物體完全放入揹包後可獲得收益vi。問 如何...
模版 揹包問題彙總
寫在前面 多重揹包優化方案還有單調佇列優化 暫未實現 單調佇列優化參考 0 1揹包第二層迴圈為什麼倒序,完全揹包第二層迴圈為什麼正序 01揹包模版 include include include using namespace std define maxsize 100010 注意最大物品數的修改...
揹包問題彙總2(分組揹包,揹包問題求方案數)
揹包問題上加一層迴圈就可以了,最外層控制第幾組,最內層迴圈依此遍歷第i組所有物品的資訊。樣例題目 有 n 組物品和乙個容量是 v 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。求解將哪些物品裝入揹包,可使物品總體積...