揹包問題總結

2021-09-25 15:56:40 字數 3788 閱讀 5334

01揹包問題

#include #include #include #include #include #include #include #include #include #include #define eps 1e-8

typedef long long ll;

const double pi = acos(-1.0);

const int maxn = 1e6;

const int inf = 0x3f3f3f;

const ll linf = 0x3f3f3f3f3f3f3f3f;

using namespace std;

int f[maxn];

int v[maxn],w[maxn];

int n,v;

int main()

a[maxn];

int main()

if(s)

}for(int i = 1; i<=cnt; i++)

for(int j = v; j>=a[i].v; j--)

f[j] = max(f[j],f[j-a[i].v]+a[i].w);

cout《多重揹包問題(單調佇列優化)

混合揹包問題

#include #include #include #include #include #include #include #include #include #include #define eps 1e-8

typedef long long ll;

const double pi = acos(-1.0);

const int maxn = 1e6;

const int inf = 0x3f3f3f;

const ll linf = 0x3f3f3f3f3f3f3f3f;

using namespace std;

int f[maxn];

int v,w,s;

int n,v;

struct node

a[maxn];

int main()

else if(s>0)

if(s)

}else

}for(int i = 1; i<=cnt; i++)

else

}cout《二維費用揹包問題

#include #include #include #include #include #include #include #include #include #include #define eps 1e-8

typedef long long ll;

const double pi = acos(-1.0);

const int maxn = 1005;

const int inf = 0x3f3f3f;

const ll linf = 0x3f3f3f3f3f3f3f3f;

using namespace std;

int f[maxn][maxn];

int v,w,m;

int n,v,m;

int main()

cout《分組揹包問題

#include #include #include #include #include #include #include #include #include #include #define eps 1e-8

typedef long long ll;

const double pi = acos(-1.0);

const int maxn = 1005;

const int inf = 0x3f3f3f;

const ll linf = 0x3f3f3f3f3f3f3f3f;

using namespace std;

int f[maxn];

int s;

int v[maxn],w[maxn];

int n,v,m;

int main()

}cout《有依賴的揹包問題

#include #include #include #include #include #include #include #include #include #include #define eps 1e-8

typedef long long ll;

const double pi = acos(-1.0);

const int maxn = 1005;

const int inf = 0x3f3f3f;

const ll linf = 0x3f3f3f3f3f3f3f3f;

using namespace std;

int nxt[maxn],head[maxn],ver[maxn];

int f[maxn][maxn];

int n,v;

int v[maxn],w[maxn];

int tot;

void add(int x, int y)

void dfs(int u)

for(int i = v; i>=v[u]; i--)

f[u][i] = f[u][i-v[u]]+w[u];

for(int i = 0; i>n>>v;

int root;

for(int i = 1; i<=n; i++)

dfs(root);

cout《揹包問題求方案數

#include #include #include #include #include #include #include #include #include #include #define eps 1e-8

typedef long long ll;

const double pi = acos(-1.0);

const int maxn = 1005;

const int inf = 0x3f3f3f;

const ll linf = 0x3f3f3f3f3f3f3f3f;

const int mod = 1e9+7;

using namespace std;

int f[maxn],g[maxn];

int n,v;

int main()

}int maxw = 0;

for(int i = 0; i<=v; i++)

maxw = max(maxw,f[i]);

int res = 0;

for(int i = 0; i<=v; i++)

}cout《揹包問題求具體方案

#include #include #include #include #include #include #include #include #include #include #define eps 1e-8

typedef long long ll;

const double pi = acos(-1.0);

const int maxn = 1005;

const int inf = 0x3f3f3f;

const ll linf = 0x3f3f3f3f3f3f3f3f;

const int mod = 1e9+7;

using namespace std;

int f[maxn][maxn];

int v[maxn],w[maxn];

int n,v;

int main()

}int vol = v;

for(int i = 1; i<=n; i++)

}return 0;

}

揹包問題 01揹包總結

寫這篇部落格的原因是因為自己初學揹包的時候覺得好玄學。只是知道怎麼寫,但是具體是為什麼覺得很玄妙。在此其實希望和我一樣的小白萌新早點明白其中的原理,其實原理很簡單,只要懂了這個圖,我想01揹包就不成問題了。首先要明確這張表是至底向上,從左到右生成的。關於01揹包的題目暫時整理了一點。1.簡單01揹包...

揹包問題總結

標籤 acm dp 揹包 n 物品,乙個揹包,每個物品價值wi 體積vi 揹包容量 c 求最大價值 對於物品 i可選可不選 fi j fi 1 j vi j 0 fi j max c j vi 給定 n 種物品和乙個揹包。第 i種物品的價值是 wi 其體積為vi 揹包的容量為 c 同一種物品的數量無...

揹包問題總結

揹包問題主要是分為三種 0 1揹包,完全揹包,多重揹包 1 0 1揹包 定義 何謂0 1揹包,可以這樣想,那裡有一堆值錢的東西,每一樣東西只有一件,他們的價值和體積都不一樣,現在要你從這n件裡面挑選一些放到乙個容量一定的揹包裡面,使得你的揹包裡的東西總價值最大。對於這些東西的每一件,你可以選擇放進你...