news 2026/4/23 8:37:41

2025年信息学奥赛CSP-S2提高组题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2025年信息学奥赛CSP-S2提高组题解

CSP-S 第二轮算法比赛已于昨日结束;下面分享我的题解。

第一题,难度为普及+/提高,后悔贪心,难度还好,即使不会可以得到 70 分

第二题,难度为提高+/省选−,剪枝或者多路合并,会卡住不少人,不过被卡了可以得 80 分

第三题,难度为省选/NOI−,哈希与 AC 自动机会简单一些,暴力可以得 80 分

第四题,难度为省选/NOI−,三维动态规划,难度非常大,属于 noi 级别的题目了,暴力只能得 28 分

这样看来,不会高端算法,暴力可以得70+80+80+28=258

PS1:我觉得第四条应该有 NOI 级别黑题了,毕竟三维动态规划,还涉及到排列组合,太复杂了。

PS2:后面我会基于这次比赛的题型,来展开介绍最小生成树、字符串、动态规划等相关算法专题

一、社团招新(club)

题意:我们学校的算法协会招募了n名新成员,其中n是一个偶数。

现在需要将这些新成员分配到协会的三个部门中。

每个新成员对这三个部门都有一个满意度得分。

我们的目标是找到一个分配方案,使得所有成员的满意度之和最大。

但是,分配有一个限制条件:任何一个部门分配到的新成员数量都不能超过n/2

简而言之,就是要在限制每个部门人数不超过总人数一半的前提下,最大化总满意度。

最优解:后悔贪心

思路1:动态规划

状态定义:dp[i][j][k]表示前i名新成员中,分配到部门 1 的人数为j、分配到部门 2 的人数为k时的最大满意度(注意部门 3 的人数为i - j - k)。

状态转移方程:第 i 个人枚举分配到哪个部门(下面用 j,k 表示部门 1/2 的人数,c 表示部门 3):

// 假设 c = i - j - k dp[i][j][k] = -INF; // 或者初始化为 -1 表示不可达 // 选择 A(部门1) if (j > 0 && dp[i - 1][j - 1][k] != -1) { dp[i][j][k] = max(dp[i - 1][j - 1][k] + a1, dp[i][j][k]); } // 选择 B(部门2) if (k > 0 && dp[i - 1][j][k - 1] != -1) { dp[i][j][k] = max(dp[i - 1][j][k - 1] + a2, dp[i][j][k]); } // 选择 C(部门3) int c = i - j - k; if (c > 0 && dp[i - 1][j][k] != -1) { dp[i][j][k] = max(dp[i - 1][j][k] + a3, dp[i][j][k]); }

答案:枚举所有情况,求最大值。

for (int a = 0; a <= n; a++) { for (int b = 0; b <= n; b++) { ans = max(ans, dp[n][a][b]); } }

复杂度:O(n^3)

得分:55 分

特殊性质 A:a2 和 a3 全为 0

思路:在这种情况下只需从 a1 中选择最大的 n/2 个,其余分配为 0

得分:60 分

// 特殊性质 A: a2 和 a3 全为 0 if (sum2 == 0 && sum3 == 0) { // a1 中选择最大的 n/2 个,其他选 0 sort(a.begin(), a.end(), greater<tuple<ll, ll, ll>>()); ll ans = 0; for (int i = 0; i < n / 2; i++) { ans += get<0>(a[i]); } printf("%lld\n", ans); }

特殊性质 C:独立均匀随机生成

思路:当样本是独立均匀随机生成时,直接对每个人选择三项中的最大值(不考虑 n/2 限制)通常能取得较好结果。

得分:70 分

// 特殊性质 C:贪心选择 ll ans = 0; for (auto& [a1, a2, a3] : a) { ans += max(a1, max(a2, a3)); } printf("%lld\n", ans);

最优解:后悔贪心

根据容忍与鸽巢原理,可以得到几个性质。

性质1:最多有一个部门的人数超过n/2(若两部门都超过n/2,则两者之和 > n,矛盾)。

性质2:如果将某个超过n/2的部门通过调整(按最小代价把多余成员转出)降到n/2,则调整结束后不会让其他部门超过n/2(因为总人数固定为n)。

根据上面的两个性质,可以先贪心,再反悔贪心

贪心:不考虑n/2限制,贪心选择最大值。

反悔:对于超过n/2的部门,选择一些人反悔选择这个部门,改为选择其他部门(选择哪个不重要,根据性质2其他部门不会超过限制)。

所以这里就需要决策哪些人反悔

定义反悔代价:假设一个人当前部门的满意度是 a1(贪心的最大值),另外两个部门的满意度是 a2 和 a3,那么反悔代价就是a1 - max(a2, a3)

显然,需要选择反悔代价最小的那些人,直到该部门人数不超过n/2

复杂度:O(n log(n))

得分:100 分

vector<ll> g[3]; // g[0].push_back(a1 - max(a2, a3)); // 输入与贪心选择,代码省略 // 后悔贪心, 找到超过 n/2 的部门 i int sz = g[i].size(); sort(g[i].begin(), g[i].end()); for (int j = 0; j < sz - n / 2; j++) { ans -= g[i][j]; }

二、道路修复(road)

题意:我们有一个由N个城市和M条双向道路构成的交通系统。

最初,所有M条道路都已损坏,修复第i条道路的费用是w_i

此外,还有K个乡镇可以进行城市化改造。对第j个乡镇进行城市化改造的费用是c_j

改造后,可以在该乡镇和原有的N个城市之间修建道路,乡镇j到城市i的修建费用是a_{j,i}

我们的目标是:选择任意多个乡镇进行城市化改造(可以选择0)。

修复一些原有道路,并修建一些新的乡镇-城市道路。

最终使得原有的N个城市两两连通。

求出达成这一目标的最小总费用(乡镇改造费 + 道路修复/新建费)。

最优解:最小生成树+剪枝

思路1:暴力枚举

暴力枚举所有乡镇的选择方案,合并所有边,排序,最后求最小生成树。

关于如何枚举所有子集,请关注博客。

const int MASK = (1 << k) - 1; for (int sub = MASK; sub; sub = (sub - 1) & MASK) { townSelectEdges = baseEdges; ll subCost = 0; int selectNum = 0; for (int i = 0; i < k; i++) { if ((sub >> i) & 1) { selectNum++; // 选择第 i 个乡镇 s
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 8:36:17

ECharts 安装

ECharts 安装指南 Apache ECharts 当前最新版本是 6.0.0&#xff08;发布于 2025 年 7 月左右&#xff09;。ECharts 支持多种安装和引入方式&#xff0c;适用于不同开发场景。以下是常见方法&#xff1a; 1. 通过 CDN 引入&#xff08;推荐初学者和快速原型&#xff09; 最…

作者头像 李华
网站建设 2026/4/23 8:37:41

学术写作新纪元:解锁书匠策AI期刊论文写作的“五维突破法”

在科研竞争白热化的今天&#xff0c;期刊论文的质量与效率已成为学者突破职业瓶颈的关键。当传统写作模式陷入"文献堆砌-灵感枯竭-反复修改"的死循环时&#xff0c;书匠策AI&#xff08;官网&#xff1a;http://www.shujiangce.com&#xff09;以"人类智慧机器智…

作者头像 李华
网站建设 2026/4/23 8:36:17

解锁科研新姿势:书匠策AI文献综述,让学术探索如虎添翼

在科研的浩瀚宇宙中&#xff0c;每一位研究者都是勇敢的星际探险家&#xff0c;不断追寻着知识的星辰大海。然而&#xff0c;面对堆积如山的学术文献&#xff0c;如何高效地梳理、整合&#xff0c;进而提炼出有价值的信息&#xff0c;成为横亘在众多科研人面前的一道难题。别担…

作者头像 李华
网站建设 2026/4/23 8:36:48

图搜索算法全解析:从DFS到最短路径

图搜索算法是解决图论问题的核心工具&#xff0c;在计算机科学、人工智能、网络路由等领域有广泛应用。&#x1f4ca; 图的基本概念什么是图&#xff1f;图(Graph)由顶点(Vertex/Node)和边(Edge)组成&#xff0c;用于表示对象之间的关系。from collections import defaultdict,…

作者头像 李华
网站建设 2026/4/23 8:34:55

高效创作H5场景秀的PHP源码系统,流畅体验,一键生成营销页面

温馨提示&#xff1a;文末有资源获取方式在当今数字营销浪潮中&#xff0c;H5页面以其互动性强、易于传播的特点&#xff0c;成为活动推广、品牌宣传的重要工具。为满足广大用户快速、高效制作各类H5场景秀的需求&#xff0c;我们隆重推出一款基于PHPMySQL开发的H5场景秀源码系…

作者头像 李华
网站建设 2026/4/10 10:17:44

零基础打造专业H5营销页面,强大源码系统让创意轻松落地

温馨提示&#xff1a;文末有资源获取方式在信息飞速传播的时代&#xff0c;一个富有吸引力的H5页面往往能在短时间内触达大量受众&#xff0c;成为营销推广的利器。然而&#xff0c;专业设计能力的缺乏常常让许多创意止步于想象。为此&#xff0c;我们推出一款功能完备的H5场景…

作者头像 李华