ABC 160 E - Red and Green Apples
ABC 160 E - Red and Green Apples についてのメモを残します。
リンゴは好きです
赤色のリンゴが 個、緑色のリンゴが 個、無色のリンゴが 個ある。
無色のリンゴは、赤色または緑色に着色できる。
赤色のリンゴを 個、緑色のリンゴを 個食べるとき、"美味しさ" の総和の最大値はいくらか。
赤色と緑色のリンゴについて、あらかじめ "美味しさ" の大きい順にそれぞれ 個、 個取り出しておく。
そして、色を無視して "美味しさ" の大きい順に 個食べるとよい。
選ばれなかった赤・緑のリンゴの個数と選ばれた無色のリンゴの個数は一致する。
無色のリンゴを適宜着色することにより、食べる 個の内訳を赤 個、緑 個にすることが可能。
#include <bits/stdc++.h> using namespace std; int main() { int X, Y, A, B, C; cin >> X >> Y >> A >> B >> C; vector<int> p(A), q(B), r(C); for (int i = 0; i < A; i++) cin >> p.at(i); for (int i = 0; i < B; i++) cin >> q.at(i); for (int i = 0; i < C; i++) cin >> r.at(i); sort(p.begin(), p.end(), greater<int>()); sort(q.begin(), q.end(), greater<int>()); priority_queue<int> pq; for (int i = 0; i < X; i++) pq.push(p.at(i)); for (int i = 0; i < Y; i++) pq.push(q.at(i)); for (int i = 0; i < C; i++) pq.push(r.at(i)); long long ans = 0; for (int i = 0; i < X + Y; i++) { ans += pq.top(); pq.pop(); } cout << ans << endl; }