双WA求助
查看原帖
双WA求助
1802933
eastnear楼主2025/7/23 17:06

子任务0#11,子任务1#1双WA,求解

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct Item {
    int volume;
    int value;
};

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m, C;
    cin >> n >> m >> C;
    vector<Item> items;
    for (int i = 0; i < n; ++i) {
        int v, w, d;
        cin >> v >> w >> d;
        for (int k = 1; k <= d; k *= 2) {
            items.push_back({v * k, w * k});
            d -= k;
        }
        if (d > 0) {
            items.push_back({v * d, w * d});
        }
    }

    vector<int> dp(C + 1, 0);
    for (const auto& item : items) {
        for (int j = C; j >= item.volume; --j) {
            if (dp[j - item.volume] + item.value > dp[j]) {
                dp[j] = dp[j - item.volume] + item.value;
            }
        }
    }
    for (int i = 0; i < m; ++i) {
        int a, b, c;
        cin >> a >> b >> c;
        vector<int> temp(C + 1, 0);
        for (int x = 0; x <= C; ++x) {
            temp[x] = a * x * x + b * x + c;
        }
        vector<int> new_dp(C + 1, 0);
        for (int j = 0; j <= C; ++j) {
            int max_val = 0;
            for (int x = 0; x <= j; ++x) {
                if (j - x >= 0) {
                    int current = dp[j - x] + temp[x];
                    if (current > max_val) {
                        max_val = current;
                    }
                }
            }
            new_dp[j] = max_val;
        }
        dp = move(new_dp);
    }
    cout << *max_element(dp.begin(), dp.end()) << endl;
    return 0;
}
2025/7/23 17:06
加载中...