news 2026/3/18 18:29:23

2025年12月GESP真题及题解(C++七级): 学习小组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2025年12月GESP真题及题解(C++七级): 学习小组

2025年12月GESP真题及题解(C++七级): 学习小组

题目描述

班主任计划将班级里的n nn名同学划分为若干个学习小组,每名同学都需要分入某一个学习小组中。班级里的同学依次以1 , 2 , … , n 1,2,\ldots,n1,2,,n编号,第i ii名同学有其发言积极度c i c_ici

观察发现,如果一个学习小组中恰好包含编号为p 1 , p 2 , … , p k p_1,p_2,\ldots,p_kp1,p2,,pkk kk名同学,则该学习小组的基础讨论积极度为a k a_kak,综合讨论积极度为a k + max ⁡ { c p 1 , c p 2 , … , c p k } − min ⁡ { c p 1 , c p 2 , … , c p k } a_k+\max\{c_{p_1},c_{p_2},\ldots,c_{p_k}\}−\min\{c_{p_1},c_{p_2},\ldots,c_{p_k}\}ak+max{cp1,cp2,,cpk}min{cp1,cp2,,cpk},也即基础讨论积极度加上小组内同学的最大发言积极度与最小发言积极度之差。

给定基础讨论积极度a 1 , a 2 , … , a n a_1,a_2,\ldots,a_na1,a2,,an,请你计算将这n nn名同学划分为学习小组的所有可能方案中,综合讨论积极度之和的最大值。

输入格式

第一行,一个正整数n nn,表示班级人数。

第二行,n nn个非负整数c 1 , c 2 , … , c n c_1,c_2,\ldots,c_nc1,c2,,cn,表示每位同学的发言积极度。

第三行,n nn个非负整数a 1 , a 2 , … , a n a_1,a_2,\ldots,a_na1,a2,,an,表示不同人数学习小组的基础讨论积极度。

输出格式

输出一行,一个整数,表示所有划分方案中,学习小组综合讨论积极度之和的最大值。

输入输出样例 #1
输入 #1
4 2 1 3 2 1 5 6 3
输出 #1
12
输入输出样例 #2
输入 #2
8 1 3 2 4 3 5 4 6 0 2 5 6 4 3 3 4
输出 #2
21
说明/提示

对于40 % 40\%40%的测试点,保证c i = 0 c_i=0ci=0

对于所有测试点,保证1 ≤ n ≤ 300 1\le n\le 3001n3000 ≤ c i ≤ 10 4 0\le c_i\le 10^40ci1040 ≤ a i ≤ 10 4 0\le a_i\le 10^40ai104

思路分析

题目要求将n nn个同学划分成若干个学习小组,使得所有小组的综合讨论积极度之和最大。每个小组的得分由基础积极度a k a_kak和组内最大最小发言积极度之差组成。

通过分析,我们可以将问题转化为:将同学按发言积极度c i c_ici排序后,选择m mm个小组(每组至少两人),这些小组的最小值取排序后最小的m mm个值,最大值取排序后最大的m mm个值,并且一一配对。剩下的同学作为中间同学分配到这些小组中,或者作为单独小组(每组一人)。通过动态规划计算最优分配,从而得到最大总得分。

代码实现

#include<bits/stdc++.h>usingnamespacestd;constintN=305;intc[N],a[N];intf[N][N];// f[m][s] 表示 m 个小组分配 s 个中间同学的最大 sum(a_{2+t_i})intmain(){intn;cin>>n;for(inti=0;i<n;i++)cin>>c[i];for(inti=0;i<n;i++)cin>>a[i];sort(c,c+n);// 按发言积极度排序// 初始化 f 为负无穷,f[0][0] = 0for(inti=0;i<=n/2;i++){for(intj=0;j<=n;j++){f[i][j]=-1e9;}}f[0][0]=0;// 预处理 f[m][s]for(intm=1;m<=n/2;m++){intmax_s=n-2*m;// 中间同学最多有 n-2m 个for(ints=0;s<=max_s;s++){for(intt=0;t<=s;t++){// 当前小组分配 t 个中间同学if(1+t<n){// a[1+t] 对应 a_{2+t}f[m][s]=max(f[m][s],f[m-1][s-t]+a[1+t]);}}}}intans=0;// 枚举小组数量 mfor(intm=0;m<=n/2;m++){intr=n-2*m;// 剩余同学数量(可能作为中间同学或单独小组)// 计算极差贡献:最小的 m 个和最大的 m 个配对intdiff_sum=0;for(inti=0;i<m;i++){diff_sum+=c[n-1-i]-c[i];}// 枚举中间同学数量 sfor(ints=0;s<=r;s++){intscore=diff_sum+f[m][s]+(r-s)*a[0];// a[0] 对应 a_1ans=max(ans,score);}}cout<<ans<<endl;return0;}

算法分析

  1. 排序:首先将同学按发言积极度c i c_ici从小到大排序。
  2. 动态规划预处理
    • 定义f[m][s]表示有m mm个小组(每组至少两人),分配s ss个中间同学时,这些小组的基础积极度之和的最大值。
    • 转移方程:f[m][s] = max_{t=0..s} f[m-1][s-t] + a[2+t],其中t tt是当前小组分配的中间同学数。
  3. 枚举与计算
    • 枚举小组数m mm0 ≤ m ≤ n / 2 0 \le m \le n/20mn/2),计算剩余同学数r = n − 2 m r = n - 2mr=n2m
    • 计算极差贡献:最小的m mmc i c_ici与最大的m mmc i c_ici一一配对,求和c max − c min c_{\text{max}} - c_{\text{min}}cmaxcmin
    • 枚举中间同学数s ss0 ≤ s ≤ r 0 \le s \le r0sr),计算总得分:极差贡献 +f[m][s]+ 单独小组贡献( r − s ) × a 1 (r-s) \times a_1(rs)×a1
  4. 输出最大值

复杂度分析

  • 时间复杂度:O ( n 3 ) O(n^3)O(n3),其中n ≤ 300 n \le 300n300,三重循环(枚举m mms sst tt)可接受。
  • 空间复杂度:O ( n 2 ) O(n^2)O(n2),用于存储f数组。

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 16:52:33

Oracle Flashback(闪回)技术全指南

一、Flashback Database&#xff08;数据库级闪回&#xff09;1. 核心原理类似 RMAN 不完全恢复&#xff0c;通过Flashback Log&#xff08;闪回日志&#xff09; 将整个数据库回退到过去某个时点&#xff0c;依赖 RVWR&#xff08;Recover Writer&#xff09;后台进程写入闪回…

作者头像 李华
网站建设 2026/3/15 13:21:46

vivado2023.2下载安装教程:新手教程之避免常见下载陷阱

Vivado 2023.2 安装实战指南&#xff1a;从零开始避坑&#xff0c;一次成功 你是不是也曾在百度搜索“vivado2023.2下载安装教程”时&#xff0c;被一堆广告、失效链接和压缩包搞得焦头烂额&#xff1f; 明明点的是“高速下载”&#xff0c;结果等了三小时只下完一半&#xf…

作者头像 李华
网站建设 2026/3/15 10:34:05

HunyuanVideo-Foley极限挑战:10分钟长视频音效生成稳定性测试

HunyuanVideo-Foley极限挑战&#xff1a;10分钟长视频音效生成稳定性测试 1. 背景与挑战&#xff1a;当AI音效遇上长视频生成 1.1 视频音效自动化的技术演进 在传统影视制作中&#xff0c;音效设计&#xff08;Foley&#xff09;是一项高度依赖人工经验的艺术工作。从脚步声…

作者头像 李华
网站建设 2026/3/15 13:57:47

AI人脸隐私卫士在博物馆数字藏品中的版权保护延伸

AI人脸隐私卫士在博物馆数字藏品中的版权保护延伸 1. 引言&#xff1a;当数字藏品遇见隐私保护 随着博物馆数字化进程的加速&#xff0c;越来越多的珍贵文物、历史影像和艺术作品被以高分辨率形式存档并在线展示。这一趋势不仅推动了文化遗产的广泛传播&#xff0c;也催生了新…

作者头像 李华
网站建设 2026/3/15 22:16:31

从图片到骨骼图实战:MediaPipe Pose极速CPU版

从图片到骨骼图实战&#xff1a;MediaPipe Pose极速CPU版 1. 引言&#xff1a;AI人体骨骼关键点检测的现实价值 在计算机视觉领域&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09; 是一项极具实用价值的技术。它通过分析图像或视频中的人体结构&#…

作者头像 李华
网站建设 2026/3/15 13:31:40

QSPI协议通信特点解析:适合新手的认知型指南

QSPI协议通信全解析&#xff1a;从零理解高速串行闪存接口的实战之道你有没有遇到过这样的场景&#xff1f;开发一款带图形界面的物联网设备&#xff0c;UI资源丰富&#xff0c;固件体积动辄几MB。可每次开机都要等好几秒才能进入主界面——因为MCU得先把整个程序从外部Flash“…

作者头像 李华