当前位置: 首页 > news >正文

题解:洛谷 P14242 [CCPC 2024 Shandong I] 分割序列

洛谷 P14242 [CCPC 2024 Shandong I] 分割序列 题解(贪心)

题意

给定长度为 \(n\) 的整数序列 \(a_1, a_2, \cdots, a_n\),将序列分成 \(k\) 段连续且非空的子数组,使得序列中的每个元素恰属于一个子数组。令 \(s_i\) 表示从左到右第 \(i\) 个子数组里的元素之和,对于每个 \(1 \le k \le n\),求下式的最大值。

\[\sum\limits_{i = 1}^k i \times s_i \]

数据范围与约定

\(1 \le n \le 5 \times 10^5\)

\(-10^6 \le a_i \le 10^6\)

保证所有数据 \(n\) 之和不超过 \(5 \times 10^5\)

题解

在下文中,我们称 \(\sum\limits_{i = 1}^k i \times s_i\) 这个式子,即题面中要求的式子,成为“权值和”。

考虑基本情况。

对于一个长度为 \(n\) 的数组 \(a\),在 \(a_k\)\(a_{k + 1}\) 之间拆分开,前面的权值和为 \(\sum \limits _{i = 1} ^{k} a_i\),后面的权值和为 \(\sum \limits _{i = k + 1} ^{n} a_i\),整个数组的权值和 \(S\) 为:

\[\begin{align*}S &= (\sum \limits _{i = 1} ^{k} a_i) + 2 \cdot (\sum \limits _{i = k + 1} ^{n} a_i) \\&= (\sum \limits _{i = 1} ^{k} a_i) + (\sum \limits _{i = k + 1} ^{n} a_i) + (\sum \limits _{i = k + 1} ^{n} a_i) \\&= (\sum \limits _{i = 1} ^{n} a_i) + (\sum \limits _{i = k + 1} ^{n} a_i)\end{align*} \]

其实 \(\sum \limits _{i = k + 1} ^{n} a_i\) 就是 \(a\) 的后缀和。

对于分成 \(3\) 段,会发现其权值和就是分成 \(2\) 段时的权值和再加上一段后缀和。

所以我们得出结论,对于一个长度为 \(n\) 的数组 \(a\),将其分成 \(k\) 段,所得出的权值和为 \(\operatorname{S}(k) = \operatorname{S}(k - 1) + \operatorname{suf}\),其中 \(\operatorname{suf}\) 为后缀和。

出于贪心的思想,想要让权值和最大,\(\operatorname{suf}\) 就需要最大(因为 \(\operatorname{S}(k)\) 一定)。

CODE

#include<bits/stdc++.h>
using namespace std;
/*====================*/
using lnt = long long;
/*====================*/
#define endl "\n"
/*====================*/
const int N = 5e5 + 10;
/*====================*/
int arr[N];
/*====================*/
lnt suf[N];
/*====================*/
void Solve()
{int n; cin >> n;for (int i = 1; i <= n; i++) cin >> arr[i]; suf[n + 1] = 0;for (int i = n; i >= 1; i--){suf[i] = suf[i + 1] + arr[i];}lnt sum = suf[1];cout << sum << " ";sort(suf + 2, suf + n + 1, greater<lnt>());for (int i = 2; i <= n; i++){sum += suf[i];cout << sum << " ";}cout << endl;
}
/*====================*/
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr), cout.tie(nullptr);int t = 1; cin >> t;while (t--) Solve();return 0;
}
http://www.jsqmd.com/news/334078/

相关文章:

  • 一个用postgresql的自定义函数求解数独的程序
  • AlertDialog.show()中message的字体大小和颜色如何修改?
  • LP2178BY/LP2178B非隔离5V350mA语音小夜灯电源芯片解析
  • 2025-2026宣城本地生活团购运营服务商综合实力五强盘点 - 野榜数据排行
  • 2026年家用净水器怎么选?家用净水器十大品牌权威排行 - 水业策论
  • TikTok跨境电商:从“爆单逻辑”走向“合规与履约”时代的实战打法
  • <span class=“js_title_inner“>【AI时代生存指南】拒做时代的燃料:在算法迷雾中,夺回属于“人”的阵地</span>
  • 2026国内有实力的湖州花园设计施工公司排行 - 品牌排行榜
  • CH58X/CH59X的中断优先级配置机制
  • 2026年GEO源头厂家决策指南:深度解析摘星AI登顶之道与五大服务商全景测评 - 2026年企业推荐榜
  • <span class=“js_title_inner“>从数据供给到价值变现的闭环构建|大模型与数据要素论坛圆满落幕!</span>
  • 2026亚马逊自养号测评技术全解:五大核心维度构建安全运营体系
  • 2026全自动均质器实力厂家TOP5推荐:质量好、口碑出众、售后无忧 - 品牌推荐大师1
  • 2026四川盲道砖厂家权威榜单 全场景适配 品质与口碑双优全景指南 - 深度智识库
  • 2026年西安升学职高推荐榜单:聚焦艺术升学优势,优选优质教育平台 - 深度智识库
  • <span class=“js_title_inner“>VFP调用EXCEL的补充方法</span>
  • 2026年GEO源头厂家推荐 摘星AI登顶TOP1!服务商综合选购全指南 - 2026年企业推荐榜
  • 领航智联时代:阿里云 MQTT+Kafka 车/物联网实时数据分析解决方案
  • 大厂前端面试最新整理笔记(50万字经验总结)
  • 血珀戒指选购攻略:看图辨真假与品质
  • 上海开放大学电子商务导论作业答案
  • <span class=“js_title_inner“>聚辰半导体冲刺港股:9个月营收9.3亿 利润3.1亿 陈作涛控制24%股权</span>
  • CF2141B 学习笔记
  • Java awt包不存在错误解决:检查JDK安装与环境变量配置
  • 百考通「降重+降AI」双效合一,轻松通过查重与AI检测双重关卡
  • 2026扫码点单系统-亿坊-一套系统搞定门店经营管理全部所需!
  • <span class=“js_title_inner“>将Visual FoxPro的数据转给Excel</span>
  • 双向链表是什么?和单向链表区别详解
  • 收藏必学!AI Agent核心模块全解析:从“会聊天“到“能干活“的进化之路
  • 反内卷健身叙事:海外网红营销如何以“适度锻炼”理念撬动新消费群体