이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
/*
Model the problem as a knapsack problem:
* Each computer will be treated as an item whose weight is numCores and the profit is -price
* Each order will be treated as an item whose weight is -numCores ans the profit is price
* To not worry about the clock rates, let's sort all computers and orders in decreasing order of clock rates.
This guarantee each accepted order will be handled by computer with larger clock rates.
dp[i][numCores] -> Maximum profit if we only consider items i up to the last item and we currently have numCores.
*/
#include<bits/stdc++.h>
using namespace std;
#define LL long long int
struct Item {
int deltaCores, clockRate, profit;
Item(int deltaCores_, int clockRate_, int profit_): deltaCores(deltaCores_), clockRate(clockRate_), profit(profit_) {}
bool operator<(Item other) const {
if (clockRate != other.clockRate) {
return clockRate > other.clockRate;
} else {
return deltaCores > other.deltaCores; // Make sure the available computer comes before the order
}
}
};
int main() {
int n, m, totalCores = 0;
LL dp[2][2000 * 50 + 3];
vector<Item> items;
cin >> n;
for (int i = 0; i < n; i++) {
int numCores, clockRate, price;
cin >> numCores >> clockRate >> price;
items.push_back(Item(numCores, clockRate, -price));
totalCores += numCores;
}
cin >> m;
for (int i = 0; i < m; i++) {
int numCores, clockRate, price;
cin >> numCores >> clockRate >> price;
items.push_back(Item(-numCores, clockRate, price));
}
sort(items.begin(), items.end());
int t = 0;
memset(dp, 0, sizeof(dp));
for (int i = n + m; i >= 1; i--) {
t = 1 - t;
for (int numCores = 0; numCores <= totalCores; numCores++) {
dp[t][numCores] = dp[1 - t][numCores];
if (numCores + items[i - 1].deltaCores >= 0) {
dp[t][numCores] = max(dp[t][numCores], dp[1 - t][numCores + items[i - 1].deltaCores] + items[i - 1].profit);
}
}
}
cout << dp[t][0] << endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |