揹包程式彙總

2021-09-29 14:36:14 字數 2453 閱讀 9853

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 是組內編號。求解將哪些物品裝入揹包,可使物品總體積...