题解 | 【模板】分组背包

【模板】分组背包

https://www.nowcoder.com/practice/32a6c222213c42efa902da6b5c9f8e99

#include <iostream>
#include <vector>
#include <cstring>

using namespace std;

const int G = 105, N = 3005, M = 3005;

int main() {
	int n, m , k;
	cin >> n >> m;
	long long* dp = new long long[m + 1];
	memset(dp, 0, sizeof(long long) * (m + 1));
	vector<vector<int> > obj_w(G + 1);
	vector<vector<int> > obj_v(G + 1);
		
	for (int i = 0; i <= G; i++) {
		obj_w[i].push_back(0);
		obj_v[i].push_back(0); 
	}
	int w, v, num, max_num = -1;
	for (int i = 0; i < n; i++) {
		cin >> w >> v >> num;
		obj_w[num].push_back(w);
		obj_v[num].push_back(v); 
		max_num = max(max_num, num);
	}
	for (int i = 1; i <= max_num; i++) {
		for (int j = m; j >= 0; j--) {
			for (int k = 0; k < obj_w[i].size(); k++) {
				if (j >= obj_w[i][k]) {
					dp[j] = max(dp[j], dp[j - obj_w[i][k]] + obj_v[i][k]);
				}
			}
		}
	}
	cout << dp[m] << endl; 
}

全部评论

相关推荐

溱元:前端每年固定死几次,看两集广告就复活了
点赞 评论 收藏
分享
影04714:把图书管理系统那个项目经验内容适当的减少掉,然后改成据为己有不要说团队项目,因为图书管理系统这类常见的谁来了都能独立写出来,提问能圆过来即可
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务