C++ 题解:最少学习题目数(避免连续相同知识点)

发布时间:2026/10/8 17:27:11

C++ 题解:最少学习题目数(避免连续相同知识点) 题目分析本题要求小杨在避免连续学习两道相同知识点题目的前提下用最少的题目数量让 m 种算法的掌握程度都至少达到 k。每道题最多学习一次学习第 i 道题可以让第 ai 种算法的掌握程度提高 bi。核心难点在于「连续学习两道相同知识点的题目是不好的」这一约束。这意味着在选出的题目序列中不能出现相邻两项知识点相同的情况。解题思路本题可以采用二分答案 贪心验证的思路二分答案对需要学习的题目数量 x 进行二分判断能否选出 x 道题满足目标。贪心验证对于给定的 x按知识点分组考虑优先选择提升量大的题目并检查是否存在一种排列方式使得相邻题目知识点不同。关键结论设选出题目中数量最多的知识点组有 cnt 道题总题数为 x。若 cnt 超过 (x 1) / 2则无论怎样排列都会出现相邻两道题知识点相同的情况此时无解。因此验证时需保证cnt (x 1) / 2算法步骤对每种算法将其所有题目的提升量 b 从大到小排序。二分答案 x判断是否存在一种选择方案从每种算法中选若干道题总数为 x且每种算法选出的题目提升量之和至少为 k同时满足「最多知识点组数量不超过 (x1)/2」。贪心选取时优先选提升量大的题目若某算法已选题目数过多导致无法满足排列约束则调整选择。参考代码C#include bits/stdc.h using namespace std; int main() { int m, n, k; cin m n k; vectorint a(n), b(n); for (int i 0; i n; i) cin a[i]; for (int i 0; i n; i) cin b[i]; vectorvectorint groups(m 1); for (int i 0; i n; i) { groups[a[i]].push_back(b[i]); } for (int i 1; i m; i) { sort(groups[i].rbegin(), groups[i].rend()); } // 二分答案 int lo 0, hi n, ans -1; while (lo hi) { int mid (lo hi) / 2; // 判断能否选 mid 道题 vectorlong long sum(m 1, 0); vectorint cnt(m 1, 0); int total 0; for (int i 1; i m; i) { int take min((int)groups[i].size(), mid); for (int j 0; j take; j) { sum[i] groups[i][j]; cnt[i]; total; } } if (total mid) { // 题目不够需要从各组中补选 // 这里简化处理若总题数不足 mid则不可行 lo mid 1; continue; } // 检查是否每种算法都达到 k bool ok true; for (int i 1; i m; i) { if (sum[i] k) { ok false; break; } } if (!ok) { lo mid 1; continue; } // 检查排列约束最多组数量不超过 (mid1)/2 int maxCnt 0; for (int i 1; i m; i) maxCnt max(maxCnt, cnt[i]); if (maxCnt (mid 1) / 2) { lo mid 1; continue; } ans mid; hi mid - 1; } cout ans endl; return 0; }复杂度分析时间复杂度O(n log n n log n)排序 O(n log n)二分验证 O(n log n)。空间复杂度O(n m)。总结本题的关键在于将「避免连续相同知识点」转化为排列约束条件即最多知识点组的数量不能超过总题数的一半向上取整。结合二分答案和贪心选取可以在 O(n log n) 时间内求解。
延伸阅读

更多相关文章

2026/10/8 17:27:11

我如何解决钻井数据趋势分段难题的

在钻井数据分析中,有一类问题看似简单,却很复杂 如何自动判断一段曲线是上升、下降还是平稳?边界在哪里?如果简单处理就是 算斜率 ,斜率大于0就是上升,小于0就是下降。但当你真正面对钻井现场的海量传感器数…

2026/10/8 17:27:11

2026深度体验:我实测豆包工作的办公效率变化

最近我一直在找能帮自己分担重复办公任务的AI工具,之前试过不少单功能的生成类工具,每次生成完内容还要自己导到办公软件里调整格式、同步给团队,来回折腾要花不少时间,上周和同部门的飞书管理员聊天,他说最近团队内测…

2026/10/8 17:22:10

Ethernet-APL会取代4-20mA?石化现场仪表通信的演进与终局判断

站在老装置机柜间里,看着端子排上一圈圈泛黄的4-20mA信号线,我突然想起前阵子做Ethernet-APL现场测试时的对比画面。一边是石化现场用了三十年的模拟信号老伙计,一边是能塞进本质安全回路里的工业以太网新兵——这问题迟早要正面回答&#xf…

2026/10/8 22:03:42

VS Code前端常用插件:把settings.json改到TaoToken统一Key通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 22:03:42

过滤精度和渗透性有没有关系

先说个我亲眼见的事。有家厂,磨床天天出烧伤的活,砂轮换得比谁都快,老板气坏了,以为是设备不行,换机床、换砂轮、调转速,折腾了两个月,一分钱没少花,活还是废。 最后请人去看&#x…

2026/10/8 22:03:42

DHCP的8类报文及工作原理:从DISCOVER到ACK的完整交互链路拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:58:39

真正开箱即用的AI编码代理:单文件+GUI操控+原生MCP

1. 项目概述:一个真正“开箱即用”的AI编码代理,不是概念玩具我做了个免费 AI 编码代理:支持操控 GUI 和 MCP,单文件运行——这句话刚发到技术群里的时候,好几个朋友第一反应是:“又一个包装好的 LLM API 调…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 0:02:17

自然数立方等于连续奇数之和:从证明到编程验证

十几年来我一直游走在数学科普和编程教学这两块内容之间,对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话:任何一个自然数 m 的立方,都可以写成 m 个连续奇数之和。2 的立方等于 3 加 5,3 的立方等…

2026/10/8 0:02:17

C#上位机SSH连接实战:用SSH.NET补齐超时、批量与密钥认证

简介:这是一份基于 C# 开发的 SSH 连接功能半成品工程,原本作为另一个主项目的子功能模块,现独立打包分享。工程采用 WinForms 界面,包含源码、解决方案、安装部署工程、NuGet 依赖包及说明文档,适合正在做远程连接、网…

2026/10/8 0:02:17

Java SpringBoot一体化智能售后系统设计与实现全解析

毕业设计年年做,Java Web 方向的题目翻来覆去就那么几个,但“一体化智能售后系统”这个题,每次看到我都觉得值得认真聊一聊。它不是一个简单 curd 堆出来的管理系统,而是把客户、工单、派单、处理、回访、统计整条链路串起来的一套…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑