题解: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++】vector 类
开发语言·c++
_upupup11 分钟前
智能指针的原理及简单模拟实现(C++)
开发语言·c++
l1t13 分钟前
DeepSeek总结的OpenZL压缩变换器
c++·算法
想吃火锅100514 分钟前
【leetcode】238.除了自身以外数组的乘积js
javascript·算法·leetcode
郝学胜-神的一滴27 分钟前
C++ Templates 01:拨开迷雾,读懂C++模板经典著作
开发语言·c++·程序人生·游戏·游戏引擎·软件构建
坤坤子吖35 分钟前
算法学习——高精度加减乘除
c++·笔记·学习·算法
CQU_JIAKE43 分钟前
10.1[A]2267,磐久UMX【上下文128K,KVCache部分]
算法
HY小宝F1 小时前
树莓派智能摄像头系统 30 天重学计划之 Day 03 · 网络基础:建立“包“的思维 —— 学习总结
网络·学习
朝朝辞暮i1 小时前
C++ 第 14 课:引用 &
开发语言·c++·算法
dadaobusi1 小时前
学习:AXI协议
学习