题解: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.

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

相关推荐
某不知名網友1 小时前
C/C++动态内存管理,智能指针及RAlI思想。
java·c语言·c++
菩提树下的打坐1 小时前
接口测试利器:REST Assured + WireMock
学习
海石2 小时前
【JS击败90%】前缀和+定长滑动窗口
算法·leetcode
hold?fish:palm2 小时前
从源码到可执行文件:C++程序的编译过程
开发语言·c++
Tisfy2 小时前
LeetCode 2685.统计完全连通分量的数量:DFS求每个连通块的边点数
算法·leetcode·深度优先··题解·连通图·全连通分量
海石2 小时前
1次遍历,空间复杂度击败100%,时间复杂度击败85%
算法·leetcode
lingran__2 小时前
C++_STL简介
开发语言·c++
南国韭菜3 小时前
【无标题】
c++·qt
L歪歪君3 小时前
Apache Doris全链路性能优化实战指南:从架构设计到生产落地
java·开发语言·算法