洛谷P1757

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;
}

posted @ 2025-05-28 20:54  Chuan81  阅读(9)  评论(0)    收藏  举报