abc160E 吃苹果能得到的最大美味度
有A个红苹果,美味度分别为p[i];有B个青苹果,美味度分别为q[i];另外还有C个无色苹果,美味度分别为r[i],无色苹果在吃之前可以涂成红色或青色。现在要吃X个红苹果和Y个青苹果,求能吃到的最大美味度。
1<=X<=A<=1E5; 1<=Y<=B<=1E5; 1<=C<=1E5; 1<=p[i],q[i],r[i]<=1E9
反悔贪心,先不考虑无色苹果,按要求吃美味度最大的红苹果和青苹果,放到小根堆里,然后用美味度更大的无色苹果去替换堆里的苹果,使答案更优。
#include <bits/stdc++.h> using namespace std; #define int long long #define rep(i,a,b) for(int i=a; i<=b; i++) #define per(i,a,b) for(int i=b; i>=a; i--) const int N = 100005; int X, Y, A, B, C, p[N], q[N], r[N]; void solve() { cin >> X >> Y >> A >> B >> C; rep(i,1,A) cin >> p[i]; rep(i,1,B) cin >> q[i]; rep(i,1,C) cin >> r[i]; sort(p+1,p+1+A, [&](auto &x, auto &y) {return x > y;}); sort(q+1,q+1+B, [&](auto &x, auto &y) {return x > y;}); priority_queue<int,vector<int>,greater<>> pq; rep(i,1,X) pq.push(p[i]); rep(i,1,Y) pq.push(q[i]); rep(i,1,C) { auto t = pq.top(); if (r[i] > t) { pq.pop(); pq.push(r[i]); } } int ans = 0; while (!pq.empty()) { ans += pq.top(); pq.pop(); } cout << ans << "\n"; } signed main() { cin.tie(0)->sync_with_stdio(0); int t = 1; while (t--) solve(); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具