AcWing 3. 完全背包问题】的更多相关文章

//f[i,j] 所有只从前i块能量石中选,且总体积恰好为j的方案数 #include <iostream> #include <algorithm> #include <cstring> using namespace std; , M = ; int n; struct Stone { int s, e, l; } stones[N]; bool cmp(Stone a, Stone b) { return a.s * b.l < b.s * a.l;//要写…
#include<iostream> #include<algorithm> #include<cstring> using namespace std ; ; int f[N],g[N],q[N]; int n,m; int a[N]; int main() { cin>>n>>m; ; i<=n; i++) { int v,w,s; cin>>v>>w>>s; ) { //完全背包 for(int j…
#include <iostream> #include <algorithm> using namespace std; ; int n, m; int v[N][N], w[N][N], s[N]; int f[N]; int main() { cin >> n >> m; ; i <= n; i ++ ) { cin >> s[i]; ; j < s[i]; j ++ ) cin >> v[i][j] >>…
//二进制优化 最后变为01背包 #include <iostream> #include <algorithm> using namespace std; , M = ; int n, m; int v[N], w[N]; int f[M]; int main() { cin >> n >> m; ; ; i <= n; i ++ ) { int a, b, s; cin >> a >> b >> s; ; whi…
朴素 #include<iostream> #include<algorithm> using namespace std ; ; int n,m; int v[N],w[N]; int f[N][N]; int main() { cin>>n>>m;//n个物品 最大体积位m ; i<=n; i++) cin>>v[i]>>w[i]; ; i<=n; i++) ; j<=m; j++) ; k*v[i]<=j…
朴素 数据范围小 //数据范围小 #include<iostream> #include<algorithm> using namespace std ; ; int n,m; int v[N],w[N],s[N]; int f[N][N]; int main() { cin>>n>>m; ; i<=n; i++) cin>>v[i]>>w[i]>>s[i]; ; i<=n; i++) ; j<=m; j…
朴素 //朴素二维 #include <iostream> #include <algorithm> using namespace std; ; int n, m; int v[N], w[N]; int f[N][N]; int main() { cin >> n >> m; ; i <= n; i ++ ) cin >> v[i] >> w[i]; ; i<=n; i++)//装的个数 ; j<=m; j++)…
多重背包 有 n种物品 一共有 m大小的背包,每种物品的价值 大小 个数 为 s[i],v[i],num[i]; #include<bits/stdc++.h>//cmhao #define N 100000 using namespace std; int a[N]; int n,m,cut; int s[N],v[N]; void change(int tj,int jz,int sl) { int q=1,x,y; while(sl) { if(sl%2) { cut++; x=tj*q…
地址 https://www.acwing.com/problem/content/description/2/ 题目描述有 N 件物品和一个容量是 V 的背包.每件物品只能使用一次. 第 i 件物品的体积是 vi,价值是 wi. 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大.输出最大价值. 输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积. 接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值. 输出格式输…
//g[i,j]表示f[i,j]取最大值的方案数目 //体积最多是j 全部为0,v>=0 //体积恰好为j f[0][0]=0,f[i]=无穷,v>=0 //体积至少是j f[0][0]=0,f[i]=无穷,体积为负数时于0取大 #include <cstring> #include <iostream> using namespace std; , mod = 1e9 + ; int n, m; int f[N], g[N]; int main() { cin >…