98pts求调
查看原帖
98pts求调
785767
44i11楼主2023/12/24 17:07
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int multipleKnapsack(int n, int m, vector<int>& weight, vector<int>& value, vector<int>& amount, vector<int>& dp) {
    for (int i = 0; i < n; i++) {
        for (int j = m; j >= weight[i]; j--) {
            for (int k = 1; k <= amount[i] && k * weight[i] <= j; k++) {
                dp[j] = max(dp[j], dp[j - k * weight[i]] + k * value[i]);
            }
        }
    }
    return dp[m];
}

int main() {
    int n, m;
    cin >> n >> m;

    vector<int> weight(n), value(n), amount(n);
    for (int i = 0; i < n; i++) {
        cin >> weight[i] >> value[i] >> amount[i];
    }

    vector<int> dp(m + 1, 0);
    int maxValue = multipleKnapsack(n, m, weight, value, amount, dp);

    cout << maxValue << endl;

    return 0;
}
2023/12/24 17:07
加载中...