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件裡面挑選一些放到乙個容量一定的揹包裡面,使得你的揹包裡的東西總價值最大。對於這些東西的每一件,你可以選擇放進你...