揹包(純模板)

2022-04-29 03:12:09 字數 4529 閱讀 2132

描述:

乙個旅行者有乙個最多能裝 m 公斤的揹包,現有 n 件物品 ,它們的重量分別為 w1、w2……wn ,它們的價值分別為 c1、c2……cn ,求旅行者能獲得的最大總價值。

輸入:第一行:兩個整數,m(揹包容量)和 n(物品數量);

第二行至 n+1 行:每行兩個整數 wi、ci,表示每個物品的重量和價值。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxm 2001

#define maxn 301

intm,n;

intw[maxn],c[maxn];

intf[maxn][maxm];

inline

intread()

while

(isdigit(ls))

return kr*xs;

}int

main()

描述:設有 n 種物品,每種物品有乙個重量及乙個價值。但每種物品的數量是無限的,同時有乙個揹包,最大載重為 m ,今從 n 種物品中選取若干件(同一種物品可以多次選取)使其重量的和 ≤ m ,而價值的和為最大。

輸入:第一行:兩個整數,m(揹包容量)和 n (物品數量);

第二行至 n+1 行:每行兩個整數 wi、ci,表示每個物品的重量和價值。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxm 2001

#define maxn 301

intm,n;

intw[maxn],c[maxn];

intf[maxn][maxm];

inline

intread()

while

(isdigit(ls))

return kr*xs;

}int

main()

描述:有 n 種物品和乙個容量為 m 的揹包。每種物品都有各自的價值 wi 、重量 vi 、和能夠購買數量 si 。

輸入:第一行:兩個整數,n (物品種數)和 m(揹包容量);

第二行至 n+1 行:每行三個整數 vi、wi、si 表示每種物品的重量、價值和能夠購買的最大數量。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 6002

intv[maxn],w[maxn],s[maxn];

intf[maxn];

intn,m;

inline

intread()

while

(isdigit(ls))

return kr*xs;

}int

main()

printf(

"%d\n

",f[m]);

return0;

}

描述:乙個旅行者有乙個最多能裝 m 公斤的揹包,現有 n 件物品,它們的重量分別為 w1、w2……wn ,它們的價值分別為 c1、c2……cn 。有的物品只可以取一次(01揹包),有的物品可以取無限次(完全揹包),有的物品可以取的次數有乙個上限(多重揹包)。求解將那些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

輸入:第一行:兩個整數, m (揹包容量)和 n (物品數量);

第二行至 n+1 行:每行三個整數 wi、ci、pi ,前兩個整數分別表示每個物品的重量、價值,第三個整數若為 0 ,則說明此物品可以購買無數件;若為其它數字,則為此物品可夠買的最多件數(pi)。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 6002

intw[maxn],c[maxn],p[maxn];

intf[maxn];

intn,m;

inline

intread()

while

(isdigit(ls))

return kr*xs;

}int

main()

else

//01揹包和多重揹包

printf(

"%d\n

",f[m]);

return0;

}

描述:有乙個揹包,容納的重量為 m 、體積為 v 。有 n 件物品,其質量為 wi、體積為 vi、價值為 ci 。求,在不超過揹包容納的最大重量和體積的情況下,所能夠獲得的最大價值。

輸入:第一行:三個整數, v(揹包容納的體積)、m(揹包容納的質量)、n(物品數量);

第二行至 n+1 行:每行三個整數 vi 、wi、ci ,分別表示物品的體積、重量和價值。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 1001

intm[maxn],v[maxn],c[maxn];

intf[maxn][maxn];

intn,v,m;

inline

intread()

while

(isdigit(ls))

return kr*xs;

}int

main()

描述:乙個旅行者有乙個最多能裝 m 公斤的揹包,現在有 n 件物品,它們的重量分別為 w1、w2……wn ,它們的價值分別為 c1、c2……cn 。這些物品被分為若干組,每組中的物品互相衝突,最多選一件。求解將那些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值最大。

輸入:第一行:三個整數,m (揹包容量)、n (物品數量)和 t (最大組號);

第二行至 n+1 行:每行三個整數 wi 、ci 、p,表示每個物品的重量、數量和所屬組號。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 1001

intn,m,t;

intw[maxn],c[maxn];

inta[maxn][maxn];

intf[maxn];

inline

intread()

while

(isdigit(ls))

return kr*xs;

}int

main()

for(int k=1;k<=t;k++)

for(int j=m;j>=0;j--)

for(int i=1;i<=a[k][0];i++)

if(j>=w[a[k][i]])

printf(

"%d\n

",f[m]);

return0;

}

01揹包模板 完全揹包 and 多重揹包(模板)

模版就直接貼 01揹包模板 cpp view plain copy print?01揹包問題 01揹包問題的特點是,每種物品僅有一件,可以選擇放或不放。01揹包問題描述 有n件物品和乙個容量為v的揹包。第i件物品的重量是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量...

01揹包模板 完全揹包 and 多重揹包(模板)

01揹包模板 01揹包問題 01揹包問題的特點是,每種物品僅有一件,可以選擇放或不放。01揹包問題描述 有n件物品和乙個容量為v的揹包。第i件物品的重量是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量,且價值總和最大。include define n 1050017...

01揹包模板 全然揹包 and 多重揹包(模板)

模版就直接貼 01揹包模板 01揹包問題 01揹包問題的特點是,每種物品僅有一件。能夠選擇放或不放。01揹包問題描寫敘述 有n件物品和乙個容量為v的揹包。第i件物品的重量是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量,且價值總和最大。include define ...