NOIP2021第三题方差题解(洛谷P7962)

题目大意:一个长度为n的不下降序列,每一项可以变为相邻两项之和减去自己,请问方差最小可以是多少?输出方差乘以n的平方。

题目描述

给定长度为 $n$ 的非严格递增正整数数列 $1 \le a_1 \le a_2 \le \cdots \le a_n$。每次可以进行的操作是:任意选择一个正整数 $1 < i < n$,将 $a_i$ 变为 $a_{i - 1} + a_{i + 1} - a_i$。求在若干次操作之后,该数列的方差最小值是多少。请输出最小值乘以 $n^2$ 的结果。 其中方差的定义为:数列中每个数与平均值的差的平方的平均值。更形式化地说,方差的定义为 $D = \frac{1}{n} \sum_{i = 1}^{n} {(a_i - \bar a)}^2$,其中 $\bar a = \frac{1}{n} \sum_{i = 1}^{n} a_i$。

输入输出格式

输入格式

输入的第一行包含一个正整数 $n$,保证 $n \le {10}^4$。 输入的第二行有 $n$ 个正整数,其中第 $i$ 个数字表示 $a_i$ 的值。数据保证 $1 \le a_1 \le a_2 \le \cdots \le a_n$。

输出格式

输出仅一行,包含一个非负整数,表示你所求的方差的最小值的 $n^2$ 倍。

深搜记忆化超时,可以改倒搜、广搜、DP,以下是改广搜的代码:按照广度优先,我们可以控制k是一层一层搜索的,这样就可以用滚动数组,避免超空间。队列中只有两层的数据,一层至多24万种和,因为会重复入队,稍微开大一点队列,循环使用即可。

原文地址:https://www.cnblogs.com/oiercc/p/15608106.html