搜索
简帛阁>技术文章>AcWing09 分组背包问题

AcWing09 分组背包问题

分组背包实际上可以看作是限制了的多重背包
每组只能取一个 那就枚举所有的策略

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 110;
int s[N], v[N], w[N];
int n, m;
int dp[N];
int main() {<!-- -->
	cin >> n >> m;
	int s;
	for (int i = 0; i < n; i++) {<!-- -->
		cin >> s;
		for (int j = 0; j < s; j++)cin >> v[j] >> w[j];
		for (int j = m; j >= 0; j--) {<!-- -->
			for (int k = 0; k < s; k++) {<!-- -->
				if (j >= v[k])dp[j] = max(dp[j], dp[j - v[k]] + w[k]);
			}
		}
	}
	cout << dp[m] << endl;
	return 0;
}
分组背包实际上可以看作是限制了的多重背包每组只能取一个那就枚举所有的策略include<iostream>include<algorithm>usingnamespacestd
题目链接:https://wwwacwingcom/problem/content/2/题目描述:解题思路:《算法图解》中的贪心、背包问题先创建一个表格(n+1)*(m+1)的一个空表(二维数组表示l
目链接:https://wwwacwingcom/problem/content/3/题目描述:解题思路:与01背包问题解法代码相似(01背包问题:https://wwwcnblogscom/ygs
题目链接:https://wwwacwingcom/problem/content/4/题目描述:解题思路:与前两个背包问题类似(题目链接:https://wwwcnblogscom/ygsr/p/1
题目:有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式:第一
题目描述:给定一个自然数N,要求把N拆分成若干个正整数相加的形式,参与加法运算的数可以重复。注意:拆分方案不考虑顺序;至少拆分成2个数的和。求拆分的方案数mod2147483648的结果。输入格式一个
题目描述一个旅行者有一个最多能用$V$公斤的背包,现在有$n$件物品,它们的重量分别是$W_1,W_2,,W_n$,它们的价值分别为$C_1,C_2,,C_n$。这些物品被划分为若干组,每组中的物品互
原题链接考察:二分or递推思路一:二分初始能量值,check函数检查即可要注意的是每次E都+Eh,也就是E2*Eh2100000不管用什么数据类型都会爆,因此必须考虑别的做法:此时思路有二:高精度,但
DFS按行枚举时间复杂度\(O(n!)\)点击查看代码include<iostream>usingnamespacestd;constintN20;intn;charg[N][N];boo
给定长度为N的数列A,然后输入M行操作指令。第一类指令形如“Clrd”,表示把数列中第l~r个数都加d。第二类指令形如“QX”,表示询问数列中第x个数的值。对于每个询问,输出一个整数表示答案。incl