相约中国女模特叶贤:东方韵致与国际风尚的完美融合
2025信奥赛C提高组csp-s复赛真题及题解社团招新题目描述小 L 是学校算法协会的成员。
在今年的学校社团招新中小 L 一共招收了n nn个新成员其中n nn为偶数。
现在小 L 希望将他们分到协会不同的部门。
算法协会共设有三个部门其中第i ii(1 ≤ i ≤ n 1 \leq i \leq n1≤i≤n) 个新成员对第j jj(1 ≤ j ≤ 3 1 \leq j \leq 31≤j≤
个部门的满意度为a i , j a_{i,j}ai,j。
定义一个分配方案的满意度为所有新成员对分配到的部门的满意度之和也就是说若将第i ii(1 ≤ i ≤ n 1 \leq i \leq n1≤i≤n) 个新成员分配到了第d i ∈ { 1 , 2 , 3 } d_i \in \{1,2,3\}di∈{1,2,3}个部门则该分配方案的满意度为∑ i 1 n a i , d i \sum_{i1}^{n} a_{i,d_i}∑i1nai,di。
小 L 不希望某一个部门的新成员数量过多。
具体地他要求在分配方案中不存在一个部门被分配多于n 2 \frac{n}{2}2n个新成员。
你需要帮助小 L 求出满足他要求的分配方案的满意度的最大值。
输入格式本题包含多组测试数据。
输入的第一行包含一个正整数t tt表示测试数据组数。
接下来依次输入每组测试数据对于每组测试数据第一行包含一个正整数n nn表示新成员的数量。
第i 1 i1i1(1 ≤ i ≤ n 1 \leq i \leq n1≤i≤n) 行包含三个非负整数a i , 1 , a i , 2 , a i , 3 a_{i,1}, a_{i,2}, a_{i,3}ai,1,ai,2,ai,3分别表示第i ii个新成员对第1 , 2 , 3 1,2,31,2,3个部门的满意度。
输出格式对于每组测试数据输出一行一个非负整数表示满足小 L 要求的分配方案的满意度的最大值。
输入输出样例 1输入 13 4 4 2 1 3 2 4 5 3 4 3 5 1 4 0 1 0 0 1 0 0 2 0 0 2 0 2 10 9 8 4 0 0输出 118 4 13说明/提示【样例 1 解释】该样例共包含三组测试数据。
对于第一组测试数据可以将四个新成员分别分配到第1 , 3 , 1 , 2 1,3,1,21,3,1,2个部门则三个部门的新成员数量分别为2 , 1 , 1 2,1,12,1,1均不超过4 2 2 \frac{4}{2} 2242满意度为4 4 5 5 18 4 4 5 5 18445518。
对于第二组测试数据可以将四个新成员分别分配到第1 , 1 , 2 , 2 1,1,2,21,1,2,2个部门则三个部门的新成员数量分别为2 , 2 , 0 2,2,02,2,0均不超过4 2 2 \frac{4}{2} 2242满意度为0 0 2 2 4 0 0 2 2 400224。
对于第三组测试数据可以将两个新成员分别分配到第2 , 1 2,12,1个部门则三个部门的新成员数量分别为1 , 1 , 0 1,1,01,1,0均不超过2 2 1 \frac{2}{2} 1221满意度为9 4 13 9 4 139413。
【数据范围】对于所有测试数据保证1 ≤ t ≤ 5 1 \leq t \leq 51≤t≤5;2 ≤ n ≤ 10 5 2 \leq n \leq 10^52≤n≤105且n nn为偶数;对于所有1 ≤ i ≤ n 1 \leq i \leq n1≤i≤n1 ≤ j ≤ 3 1 \leq j \leq 31≤j≤3均有0 ≤ a i , j ≤ 2 × 10 4 0 \leq a_{i,j} \leq 2 \times 10^40≤ai,j≤2×104。
测试点编号n nn特殊性质1 112 22无2 224 44^3 , 4 3, 43,410 1010^5 ∼ 8 5 \sim 85∼830 3030^9 99200 200200B10 , 11 10, 1110,11^无12 121210 5 10^5105A13 , 14 13, 1413,14^B15 , 16 15, 1615,16^C17 ∼ 20 17 \sim 2017∼20^无特殊性质 A对于所有1 ≤ i ≤ n 1 \leq i \leq n1≤i≤n均有a i , 2 a i , 3 0 a_{i,2} a_{i,3} 0ai,2ai,30。
特殊性质 B对于所有1 ≤ i ≤ n 1 \leq i \leq n1≤i≤n均有a i , 3 0 a_{i,3} 0ai,30。
特殊性质 C对于所有1 ≤ i ≤ n 1 \leq i \leq n1≤i≤n1 ≤ j ≤ 3 1 \leq j \leq 31≤j≤3a i , j a_{i,j}ai,j均在[ 0 , 2 × 10 4 ] [0, 2 \times 10^4][0,2×104]中独立均匀随机生成。
思路分析这是一个关于社团招新分配的优化问题。
需要将n个成员分配到3个部门每个部门人数不超过n/2目标是最大化总满意度。
我们采用反悔贪心算法来解决这个问题。
算法核心思路贪心初始化首先让每个成员选择满意度最高的部门处理超员如果某个部门人数超过n/2需要进行调整最小化损失优先调整那些调整代价满意度损失最小的成员由于n为偶数且三个部门人数总和为n数学上可以证明最多只有一个部门会超过n/2。
这是因为如果两个部门都超过n/2总人数就会超过n。
代码实现#includebits/stdc.husingnamespacestd;constintN1e510;intt,n;// 存储每个成员对三个部门的满意度structnode{intd1,d2,d3;// 分别表示对部门
1、
3的满意度}a[N];intb[N];// 记录每个成员初始选择的部门编号intmain(){cint;// 读取测试数据组数while(t--){cinn;// 读取成员数量// 读取每个成员对三个部门的满意度for(inti1;in;i){cina[i].d1a[i].d2a[i].d3;}longlongans0;// 总满意度使用long long防止溢出intcnt10,cnt20,cnt30;// 记录三个部门当前的人数// 第一步贪心初始化 - 每个成员选择满意度最高的部门for(inti1;in;i){if(a[i].d1a[i].d2a[i].d1a[i].d
{// 部门1满意度最高或并列最高b[i]1;// 记录选择部门1cnt1;// 部门1人数增加ansa[i].d1;// 累加满意度}elseif(a[i].d2a[i].d1a[i].d2a[i].d
{// 部门2满意度最高或并列最高b[i]2;cnt2;ansa[i].d2;}else{// 部门3满意度最高或并列最高b[i]3;cnt3;ansa[i].d3;}}// 第二步检查是否有部门超员并计算调整代价vectorintv;// 存储需要调整的成员的损失值for(inti1;in;i){// 如果部门1超员且当前成员选择了部门1if(cnt1n/2b[i]
{// 计算从部门1调整到其他部门的最大损失// 损失 当前满意度 - 其他两个部门中较高的满意度v.push_back(a[i].d1-max(a[i].d2,a[i].d
);}// 如果部门2超员且当前成员选择了部门2elseif(cnt2n/2b[i]
{v.push_back(a[i].d2-max(a[i].d1,a[i].d
);}// 如果部门3超员且当前成员选择了部门3elseif(cnt3n/2b[i]
{v.push_back(a[i].d3-max(a[i].d1,a[i].d
);}}// 第三步对损失值进行排序优先调整损失最小的成员sort(v.begin(),v.end());// 第四步执行调整减少超员部门的人数inti0;// 用于遍历已排序的损失值// 调整部门1的超员人员while(cnt1n/
{ans-v[i];// 减去调整损失cnt1--;// 部门1人数减少}// 调整部门2的超员人员while(cnt2n/
{ans-v[i];cnt2--;}// 调整部门3的超员人员while(cnt3n/
{ans-v[i];cnt3--;}// 输出最终的最大满意度coutansendl;}return0;}功能分析
贪心初始化阶段每个成员独立选择满意度最高的部门记录每个成员的选择和部门人数计算初始总满意度
超员检测与调整准备检查是否有部门人数超过n/2对于超员部门的每个成员计算如果调整到次优部门的满意度损失将损失值收集到数组中
调整执行阶段对损失值进行升序排序最小损失优先依次调整损失最小的成员直到部门人数不超过n/2每次调整从总满意度中减去相应的损失值
数学正确性保证由于n为偶数最多只有一个部门会超过n/2调整后其他部门不会因为接收调整的成员而超员每次调整都选择损失最小的成员保证最终总满意度最大化
时间复杂度分析贪心初始化O(n)计算调整损失O(n)排序损失值O(k log k)其中k为需要调整的成员数量最多n/2总时间复杂度O(n log n)满足题目数据范围要求n ≤ 105 ^
空间复杂度分析存储成员满意度O(n)存储调整损失O(k) ≤ O(n)总空间复杂度O(n)各种学习资料助力大家一站式学习和提升#includebits/stdc.husingnamespacestd;intmain(){cout########## 一站式掌握信奥赛知识! ##########;cout############# 冲刺信奥赛拿奖! #############;cout###### 课程购买后永久学习不受限制! ######;return0;}
csp信奥赛高频考点知识详解及案例实践CSP信奥赛C动态规划https://blog.csdn.net/weixin_66461496/category_
html点击跳转CSP信奥赛C标准模板库STLhttps://blog.csdn.net/weixin_66461496/category_
html 点击跳转信奥赛C提高组csp-s知识详解及案例实践https://blog.csdn.net/weixin_66461496/category_
html
csp信奥赛冲刺一等奖有效刷题题解CSP信奥赛C初赛及复赛高频考点真题解析持续更新https://blog.csdn.net/weixin_66461496/category_
html 点击跳转CSP信奥赛C一等奖通关刷题题单及题解持续更新https://blog.csdn.net/weixin_66461496/category_
html 点击跳转
GESP C考级真题题解GESP(C 一级二级三级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_
html 点击跳转GESP(C 四级五级六级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_
html 点击跳转GESP(C 七级八级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_
html
CSP信奥赛C竞赛拿奖视频课https://edu.csdn.net/course/detail/40437 点击跳转· 文末祝福 ·#includebits/stdc.husingnamespacestd;intmain(){cout跟着王老师一起学习信奥赛C;cout 成就更好的自己 ;cout csp信奥赛一等奖属于你! ;return0;}
欢乐谷https//5.hlg2931d,cc8888-欢乐谷应用