题解:P17078 夏日甜点

前言

原来是喜欢出背景题的出题组,着实有点意思。

分析

关键结论:任意区间的最高评价都等于该区间所有风味值之和,因此答案就是整个序列的总和,与如何划分以 k k k 无关。

设区间长度为 m m m,最大风味值为 M = max ⁡ l ≤ i ≤ r a i . M=\max_{l\le i\le r}a_i. M=maxl≤i≤rai.。

选择值为 M M M 的甜点作为主打,则因为 a i ≤ M a_i\le M ai≤M:

w p = m M − ∑ i = l r ∣ a i − M ∣ = m M − ∑ i = l r ( M − a i ) = ∑ i = l r a i . \begin{aligned} w_p &=mM-\sum_{i=l}^{r}|a_i-M|\\ &=mM-\sum_{i=l}^{r}(M-a_i)\\ &=\sum_{i=l}^{r}a_i. \end{aligned} wp=mM−i=l∑r∣ai−M∣=mM−i=l∑r(M−ai)=i=l∑rai.

另一方面,对任意选择的主打值 x = a p x=a_p x=ap,单个 a i a_i ai 的贡献为

x − ∣ a i − x ∣ ≤ a i , x-|a_i-x|\le a_i, x−∣ai−x∣≤ai,

所以

w p = ∑ i = l r ( x − ∣ a i − x ∣ ) ≤ ∑ i = l r a i . w_p=\sum_{i=l}^{r}\left(x-|a_i-x|\right) \le \sum_{i=l}^{r}a_i. wp=∑i=lr(x−∣ai−x∣)≤∑i=lrai.

因此:

f ( l , r ) = ∑ i = l r a i f(l,r)=\sum_{i=l}^{r}a_i f(l,r)=∑i=lrai

无论划分成哪 (k) 个连续非空区间,总评价都是

∑ j = 1 k f ( l j , r j ) = ∑ i = 1 n a i . \sum_{j=1}^{k}f(l_j,r_j)=\sum_{i=1}^{n}a_i. ∑j=1kf(lj,rj)=∑i=1nai.

说白了就是直接求和即可得到答案,也算是比较水的一道签到题了。

相关推荐
geats人山人海1 小时前
数据结构第六章c语言 树的存储下二叉树的概念和存储
c语言·数据结构·算法
小弥儿1 小时前
GitHub今日热榜 | 2026-08-01:硬件安全工具与AI教育并行
人工智能·学习·开源·github
秋雨梧桐叶落莳1 小时前
计算器仿写总结
学习·macos·ios·objective-c·cocoa
漂流瓶jz2 小时前
UVA-12627 奇怪的气球膨胀 题解答案代码 算法竞赛入门经典第二版
算法·图论·递归·aoapc·算法竞赛入门经典·uva·12627
迷途之人不知返2 小时前
lambda表达式
c++
jarvisuni2 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
@三十一Y2 小时前
C++:红黑树的实现
开发语言·c++
kobesdu2 小时前
流形上的优化:SO(3)与SE(3)的广义加减法在FAST-LIO中如何简化状态估计
人工智能·算法·fastlio
_wyt0012 小时前
拓扑排序:有向无环图的排队艺术
c++·拓扑排序·队列
皓月斯语2 小时前
B2118 验证子串
c++·题解