子任务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;
}