P1757 通天之分组背包
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int m, n; cin >> m >> n;
vector<vector<pair<int, int>>> groups(101);
for(int i = 1; i <= n; i++) {
int w, v, g;
cin >> w >> v >> g;
groups[g].emplace_back(w, v);
}
vector<int> dp(m + 1, 0);
for(const auto& group : groups) {
if(group.empty()) continue;
vector<int> temp = dp;
for(int j = 0; j <= m; j++) {
for(const auto& item : group) {
int w = item.first, v = item.second;
if(j >= w) temp[j] = max(temp[j], dp[j - w] + v);
}
}
dp = temp;
}
cout << dp[m] << '\n';
return 0;
}