P5752 [NOI1999] 棋盘分割 题解
true
棋盘分割
NOI 1999
提高+ /省选-
#3498db
- Luogu P5752
- AcWing 321
题目本身已经很简洁了,我这里就不再赘述了。
题目中说的“均方差” $\sigma$,其实就是标准差 $s$。
我们如果想要使标准差 $s$ 最小化,可以使方差 $s^2$ 最小化,效果是一样的。
我们可以观察到,不管我们怎么取值,我们 $\bar{x}$ 的值一定等于 $\dfrac{\sum\limits_{i=1}^8 \sum\limits_{j=1}^8 a_{i,j}}{n}$。所以我们可以提前预处理出来 $\bar{x}$,使用区间DP的方式来最小化 $\dfrac{(x_i - \bar{x})^2}{n}$。
我们设我们的DP数组为 $f[x_1][y_1][x_2][y_2][k]$,代表在已经切了 $k$ 刀时,左上角为 $(x_1,y_1)$,右下角为 $(x_2,y_2)$ 的这一个矩形所对应的DP值。
由于暴力枚举循环会很多,所以这里采用了记忆化搜索的方法。
每一次我们往下面的状态转移的时候,我们都有两种方案:横着切与竖着切。
两种切法都是枚举分割点,然后向下转移。
向下转移也有两种转移的方法,切成的两半都可以向下继续搜索,而剩下的部分就直接利用二维前缀和 $O(1)$ 求值就可以了。
当然我们还有另外一种方法,就是维护平方和 $\sum x_i^2$,使平方和最小。
代码如下:
1 |
|
下面还有一个维护平方和的代码,也有相应的题目,是洛谷P1436。
1 |
|