蓝桥杯真题 - 最大开支 - 题解

devtools/2025/1/12 7:32:14/

题目链接:https://www.lanqiao.cn/problems/3541/learning/

个人评价:难度 3 星(满星:5)
前置知识:贪心,结构体


整体思路

  • 根据题目名可知,虽然题目问的是“至少需要准备多少钱”,但实际要求的是“最大开支”,即所有人都按最贵的方式选择项目;
  • 由于参与项目的人数不同将决定项目的单价,不能直接按单价贪,考虑按增量贪心,即:如果第 i i i 个项目新加入一个成员,需要选择对答案增量最大的项目,这样才能使最终开支最大;
  • 首先计算在第 x x x 名成员加入第 i i i 个项目之前需要的开支 b e f o r e before before,即:

b e f o r e = { 0 x = 1 max ⁡ ( K i ( x − 1 ) + B i , 0 ) × ( x − 1 ) x ≠ 1 before= \begin{cases} 0 & x = 1 \\ \max(K_i (x - 1) + B_i, 0) \times (x - 1) & x \neq 1 \end{cases} before={0max(Ki(x1)+Bi,0)×(x1)x=1x=1

  • 其次计算第 x x x 名成员加入第 i i i 个项目之后需要的开支 a f t e r after after

a f t e r = max ⁡ ( K i × x + B i , 0 ) × x after=\max(K_i \times x + B_i, 0) \times x after=max(Ki×x+Bi,0)×x

  • a f t e r − b e f o r e after-before afterbefore 就是第 x x x 个成员加入后的增量,每个成员贪心取最大的增量,使用优先队列维护即可。

过题代码

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
const int maxn = 100000 + 100;
struct Node {LL k, b, x, d;Node() {}// 计算增量 dNode(LL k, LL b, LL x) : k(k), b(b), x(x) {LL before = 0;if (x != 1) {before = max(k * (x - 1) + b, 0LL) * (x - 1);}d = max(k * x + b, 0LL) * x - before;}
};bool operator<(const Node &a, const Node &b) {return a.d < b.d;
}int n, m, k, b;
LL ans;
priority_queue<Node> que;int main() {
#ifdef ExRocfreopen("test.txt", "r", stdin);
#endif // ExRocios::sync_with_stdio(false);cin >> n >> m;for (int i = 1; i <= m; ++i) {cin >> k >> b;que.push(Node(k, b, 1));}for (int i = 1; i <= n; ++i) {Node tmp = que.top();que.pop();// 如果增量 <= 0,说明再取将会减少答案,此时让后面的人不再参与项目才能得到最大开支if (tmp.d <= 0) {break;}ans += tmp.d;tmp = Node(tmp.k, tmp.b, tmp.x + 1);que.push(tmp);}cout << ans << endl;return 0;
}

http://www.ppmy.cn/devtools/149823.html

相关文章

基于SSM的“超市管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“超市管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能图 首页 后台管理登录页面 会员查询管理 用户登录 后台管…

php函数性能优化中应注意哪些问题

PHP 函数性能优化中的注意事项 在 PHP 应用中优化函数性能对于提升整体运行效率至关重要。以下是一些需要注意的关键问题&#xff1a; 1. 避免内联变量 将变量内联到函数调用中会增加不必要的开销。例如&#xff1a; function sum($a, $b) {return $a $b; }// 不要这样做&…

Clisoft SOS设置Server和Project

Clisoft SOS设置Server和Project 一、关于SOS Servers、Clients、Projects和Work Areas 以下三个图是官方文档中介绍的三种情况 图1&#xff1a;带有两个客户端的SOS服务器 图2&#xff1a;使用本地缓存服务器 图3&#xff1a;远程设计团队的缓存服务器 因为SOS软件需要…

【数据结构:前缀树Trie】

目录 前言前缀树介绍和应用一、前缀树的定义前缀树的问题和思考前缀树的映射思想前缀树三大性质 二.前缀树节点结构三. 前缀树接口介绍和实现四个接口API1. insert(String word)2. search(String word)3. startsWith(String pre)4. delete(String word) API实现1. 查询操作sear…

使用 Conda创建新的环境遇到的问题

下载速度很慢 1、更新 conda update -n base -c defaults conda2、清理缓存 conda clean --all解决方法 方法 1&#xff1a;关闭严格的渠道优先级 检查是否开启了严格渠道优先级&#xff1a; conda config --show channel_priority 如果返回 strict&#xff0c;说明启用了严…

QT Must be called on Chrome_UIThread; actually called on Unknown Thread.

具体错误 [4448:9040:0109/135034.634:FATAL:render_frame_host_impl.cc(672)] Check failed: ::content::BrowserThread::CurrentlyOn(BrowserThread::UI). Must be called on Chrome_UIThread; actually called on Unknown Thread. Backtrace:QWebEngineUrlSchemeHandler::q…

利用AI大模型和Mermaid生成流程图

核心点1&#xff1a;利用大模型生成流程图的语句&#xff08;Code&#xff09; 确定业务流程&#xff1a; 用户需要明确要绘制的业务流程&#xff0c;包括主要步骤、决策点以及各步骤之间的关系。将确定的业务流程以文字形式描述出来。 生成Mermaid代码&#xff1a; 将描述好的…

理解Apache Spark中的宽窄依赖

在Apache Spark中&#xff0c;宽窄依赖是理解其运行原理和RDD&#xff08;弹性分布式数据集&#xff09;数据结构的关键概念&#xff0c;以下是具体分析&#xff1a; 从Spark运行原理角度 宽依赖&#xff1a;宽依赖意味着一个父RDD的分区会被多个子RDD分区使用&#xff0c;通…