题目链接:Here

思路:这道题很容易看出来是考察 优先队列(priority_queue)sort .

对于容忍人数越高的人来说,团队人数低也更能做到;

for i = 0 to n - 1:
ans = max(ans, vs[i].v + 满足vs[j].s >= vs[i].s 且 i != j 的j中选<= vs[i].s - 1个的vs[j].v的最大和)

所以按 s 降序排序,维护堆即可

  • \(\mathcal{O}(nlogn)\)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
struct node {
ll v, s;
};
bool cmp(node a, node b) { return a.s > b.s; }
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int n;
cin >> n;
vector<node> vs(n);
for (int i = 0; i < n; ++i) {
cin >> vs[i].v >> vs[i].s;
}
// 按 s 大小降序排序
sort(vs.begin(), vs.end(), cmp);
ll ans = 0, tmp = 0;
// 优先队列 q 保存士兵希望团人数的数组,并以战力小为堆顶
priority_queue<int, vector<int>, greater<int>> q;
for (int i = 0; i < n; ++i) {
while (q.size() >= vs[i].s) {
tmp -= q.top();
q.pop();
}
ans = max(ans, tmp + vs[i].v);
q.push(vs[i].v), tmp += vs[i].v;
}
cout << ans << "\n";
return 0;
}

【每日一题】1. tokitsukaze and Soldier (优先队列 + 排序)的更多相关文章

  1. <每日一题> Day4:CodeForces-1042A.Benches(二分 + 排序)

    题目链接 参考代码: /* 排序 + 每次取小 #include <iostream> #include <algorithm> using namespace std; co ...

  2. 每日一题20201112(922. 按奇偶排序数组 II)

    题目链接: 922. 按奇偶排序数组 II 思路 很简单,搞懂问题的核心就行,假设现在有奇数在偶数位上,偶数在奇数位上. 那么我们要做的就是,找到分别在对方位置上的数字,然后交换他们就行. class ...

  3. 【python】Leetcode每日一题-丑数2

    [python]Leetcode每日一题-丑数2 [题目描述] 给你一个整数 n ,请你找出并返回第 n 个 丑数 . 丑数 就是只包含质因数 2.3 和/或 5 的正整数. 示例1: 输入:n = ...

  4. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  5. 【Java每日一题】20170105

    20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  6. 【Java每日一题】20170104

    20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  7. 【Java每日一题】20170103

    20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  8. 【Java每日一题】20161230

    // 20161229问题解析请点击今日问题下方的"[Java每日一题]20161230"查看(问题解析在公众号首发,公众号ID:weknow619)package Dec2016 ...

  9. 【Java每日一题】20161229

    package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1229 { public s ...

  10. 【Java每日一题】20161228

    package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1228 { public s ...

随机推荐

  1. Modbus转PROFINET网关 TS-180

    TS-180实现 PROFINET 网络与串口网络之间的数据通信.三串口可分别连接具有 RS232 或 RS485 接口的设备到PROFINET 网络,三串口相同,全为 RS232 或RS485.即将 ...

  2. 自学day7 数组

    typora-copy-images-to: media 数组 一.概念 对象中可以通过键值对存储多个数据,且数据的类型是没有限制的,所以通常会存储一个商品的信息或一个人的信息: var obj = ...

  3. 通过shell定时去创建数据月份表

    对于大数据的采集推送,有时为了方便会将一张大表的数据按照月份分别存储,尤其是在与流水表相关的业务情况,因此需要定时按照月份去创建表. 我有问过是否可以通过数据库的存储过程和事件触发器实现,得到的回答是 ...

  4. 如何基于 k8s做私有化部署

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 随着国内数字化转型的加速和国产化进程推动,软件系统的私有化部署已经成为非常热门的话题,因为私有化部署赋予了企业更大的灵活和 ...

  5. C++ Qt开发:MdiArea多窗体组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍MdiArea ...

  6. 云端开炉,线上训练,Bert-vits2-v2.2云端线上训练和推理实践(基于GoogleColab)

    假如我们一定要说深度学习入门会有一定的门槛,那么设备成本是一个无法避开的话题.深度学习模型通常需要大量的计算资源来进行训练和推理.较大规模的深度学习模型和复杂的数据集需要更高的计算能力才能进行有效的训 ...

  7. 3D网站LOGO动画

    相关技术和实现分析 3D模型 帧动画 threejs 推荐用blender创建3d模型,k帧实现从上到下翻转的帧动画 threejs 中执行帧动画,并关联滚动条 threejs 模型材质 Blende ...

  8. 创建一个双模式跨运行时的 JavaScript 包

    本文将指导你发布双模式.跨运行时的 JavaScript 包.了解如何创建与 ESM 和 CommonJS 以及 Node.js.Deno 和浏览器等不同运行时兼容的库. 随着 JavaScript ...

  9. PBKDF2(Password-Based Key Derivation Function 2)算法

    一.引言 在当今数字时代,保护用户数据和隐私的安全变得越来越重要.为实现这一目标,加密和密钥管理技术发挥着关键作用.PBKDF2(Password-Based Key Derivation Funct ...

  10. 为什么要实践 A+ES & CQRS ?

    Wow : 基于 DDD & EventSourcing 的现代响应式 CQRS 架构微服务开发框架 中文文档 领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查 ...