P2085 最小函数值——小顶堆、贪心、重载运算符

news/2025/2/24 21:13:06/文章来源:https://www.cnblogs.com/xiins/p/18734881

题目描述

\(n\) 个函数,分别为 \(F_1,F_2,\dots,F_n\)。定义 \(F_i(x)=A_ix^2+B_ix+C_i(x\in\mathbb N*)\)。给定这些 \(A_i\)\(B_i\)\(C_i\),请求出所有函数的所有函数值中最小的 \(m\) 个(如有重复的要输出多个)。

输入格式

第一行输入两个正整数 \(n\)\(m\)

以下 \(n\) 行每行三个正整数,其中第 \(i\) 行的三个数分别为 \(A_i\)\(B_i\)\(C_i\)

输出格式

输出将这 \(n\) 个函数所有可以生成的函数值排序后的前 \(m\) 个元素。这 \(m\) 个数应该输出到一行,用空格隔开。

输入输出样例 #1

输入 #1

3 10
4 5 3
3 4 5
1 7 1

输出 #1

9 12 12 19 25 29 31 44 45 54

说明/提示

数据规模与约定

对于全部的测试点,保证 \(1 \leq n,m\le10000\)\(1 \leq A_i\le10,B_i\le100,C_i\le10^4\)

题解

#include <iostream>
#include <queue>
#include <vector>
using namespace std;// 定义结构体存储函数值、函数编号和当前 x 值
struct Node {int value;  // 函数值int funcIndex;  // 函数编号int x;  // 当前 x 值// 重载运算符,用于优先队列的比较bool operator>(const Node& other) const {return value > other.value;}
};int main() {int n, m;cin >> n >> m;// 存储每个函数的 A, B, C 参数vector<vector<int>> functions(n, vector<int>(3));for (int i = 0; i < n; ++i) {cin >> functions[i][0] >> functions[i][1] >> functions[i][2];}// 定义小根堆priority_queue<Node, vector<Node>, greater<Node>> heap;// 初始化小根堆for (int i = 0; i < n; ++i) {int A = functions[i][0];int B = functions[i][1];int C = functions[i][2];// 计算 x = 1 时的函数值int value = A * 1 * 1 + B * 1 + C;// 将 (函数值, 函数编号, 当前 x 值) 加入堆heap.push({value, i, 1});}// 存储结果vector<int> result;// 进行 m 次操作for (int i = 0; i < m; ++i) {// 取出堆中最小的函数值Node top = heap.top();heap.pop();result.push_back(top.value);// 计算下一个 x 值对应的函数值int A = functions[top.funcIndex][0];int B = functions[top.funcIndex][1];int C = functions[top.funcIndex][2];int nextX = top.x + 1;int nextValue = A * nextX * nextX + B * nextX + C;// 将新的函数值加入堆heap.push({nextValue, top.funcIndex, nextX});}// 输出结果for (int i = 0; i < m; ++i) {if (i > 0) {cout << " ";}cout << result[i];}cout << endl;return 0;
}

贪心策略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/889201.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chapter1

Chapter 1 Introduction 引言数据库管理系统(DataBase Management System, DBMS) 互相关联的数据集合和一组用以访问这些数据的程序组成。 提供方便,高效的存取数据信息。1.1 应用联机事务处理。(online transaction processing)大量用户使用数据库,每个用户检索相对少量的数…

0224

关于中州养老入住办理的业务分析 1.原型如下如上可以将入住办理的业务总体看为5个表格,总体分为两部分: ​ 1:所有老人入住详情表:>1. 搜索:老人姓名为模糊搜索,老人身份证号为精准搜索;>2. 列表数据:列表中所展示的数据是入住成功且未退住的老人信息>3. 发起入住…

生成式AI之旅

还记得ChatGPT刚出来时,体验后的感觉是:知识渊博,无所不通;智慧在线,逻辑清晰,简直可以用“高端,大气,上档次”形容,但也不失“低调,奢华,有内涵”。使用GPT经历过几个阶段:最开始是娱乐阶段:以聊天,写诗之类为主;之后经历了漫长的搜索引擎阶段:搜索知识点,技…

2025省选模拟15

2025省选模拟15\(T1\) P1045. 数 \(100pts\)原题: SP6408 KKKCT2 - Counting Triangles 2 | SP5464 CT - Counting triangles考虑枚举直角顶点 \((i,j),0 \le i \le x,0 \le j \le y\),然后分为了 \(8\) 种贡献情况。设 \(\begin{cases} a=\min(i,y-j) \\ b=\min(x-i,j) \\ c…

独立开发之五个月干到4万$+

写文章的起因 本来在群里跟大伙聊天的时候,然后就聊产品终于赚钱,我说要不我写个小册或者出个课把,就写我们这种穷逼独立开发怎么做产品变现,然后我认真想了一下可能我花1个月写小册的时间的性价比不是很高。 然后本来这个话题都完结了,有小伙伴就私聊我,直接发了我个红包…

Prompt入门

Prompt,,提示词,是使用生成式AI的必备前提,好的提示词能让生成式AI给出更精准的结果,不仅能节省时间,还能节省tokens(这可是美金呀),所以在生成式AI出来后,就有Prompt Engineer提示工程师之说。于是,就有很多分享提示的文章,还有很多网站,专门收集各种场合的提示词…

SEO完全指南 从原理到实战的搜索引擎优化手册 第三章SEO与内容优化

第三章:SEO与内容 1. 基于算法的内容优化策略 搜索引擎算法的主要目标是为用户提供最相关、最有价值的内容。这些算法使用复杂的机器学习模型来理解和评估网页内容。它们考虑多个因素,包括关键词的使用、内容的深度和质量、用户交互数据以及网站的整体结构和权威性。要在搜索…

【攻防世界】CatchCat

上网一查发现是GPS数据文件 到这个GPS绘图网址上传.txt文件即可 还有一种方法,先转为KML文件txt2kml网址kml绘图

智能化客户行为轨迹分析:AI视频监控在大型商场的技术方案介绍(part7)

项目背景:为了提升顾客体验并支持精准营销,卖场或商场需要通过智能化手段分析客户在商场内的行为路线。一、具体需求 1、行为路径分析:跟踪顾客在商场内的移动轨迹,了解顾客的购物习惯和偏好。 2、高频活动区域识别:通过分析顾客停留和活动频率,识别出顾客聚集的区域。 3…

在Android源码中为APK编译系统权限

在Android源码中为APK编译系统权限,授权使用 android:sharedUserId="android.uid.system" 系统权限,可以在Android开发中授予更多功能,以瑞芯微3568平台为例系统权限获取 打包为APK进行系统签名对于 部分功能的访问需要使用到系统权限,需要 添加 android:shared…

PNG图片宽高隐写

https://www.cnblogs.com/senior-engineer/p/9548347.html

[tldr] vscode的remote插件的config文件内容解析

参考VS Code Remote SSH配置 解决了什么问题 vscode的remote插件可以直接通过可视化的UI新建一个连接通过ssh指令添加服务器的连接方式但是这种方式添加的服务器名字等于服务器IP地址,难以理解 如果出现同一个IP地址,使用不同端口的SSH,那么会被视作同一个服务器,因为连接名字和…