205 多组背包

// 205 分组背包.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <algorithm>


using namespace std;
/*
http://oj.daimayuan.top/course/5/problem/165

有 n种物品要放到一个袋子里,袋子的总容量为 m。
第 i个物品属于第 ai组,每组物品我们只能从中选择一个。
第 i种物品的体积为 vi,把它放进袋子里会获得 wi的收益。
问如何选择物品,使得在物品的总体积不超过 m的情况下,获得最大的收益?请求出最大收益。

输入格式
第一行两个整数 n,m。

接下来 n行,每行三个整数 ai,vi,wi。

输出格式
一个整数,表示答案。

样例输入
5 10
1 1 6
1 6 9
1 5 6
2 4 5
2 5 10
样例输出
16
数据规模
对于所有数据,保证 1≤n,m,ai,vi,wi≤1000。


5 10
1 1 6
1 6 9
1 5 6
2 3 5
2 9 10


*/

const int N = 1010;
vector<int> v[N], w[N];
int f[N];
int n, m;
 

int main() {
	cin >> n >> m;
	int group = 0;
	for (int i = 1; i <= n; i++)
	{
		int t;
		cin >> t; group = max(group, t);
		int a, b;
		cin >> a >> b;
		v[t].push_back(a);
		w[t].push_back(b);
	}

	for (int i = 1; i <= n; i++) {
		for (int j = m; j >= 0; j--) {
			for (int k = 0; k < v[i].size(); k++) {
				if(j >= v[i][k])
					f[j] = max(f[j], f[j - v[i][k]] + w[i][k]);
			}
		}
	}

	cout << f[m] << endl;

	return 0;
} 

posted on   itdef  阅读(5)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
历史上的今天:
2020-09-26 LeetCode 113. 路径总和 II 树的遍历

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示