


题意:
给定一个 8×8 的棋盘,棋盘的 每个小方格 都有一个 权值 wx,y
每次我们可以对棋盘进行一次 横切 或 竖切,将 棋盘 分成两块矩形的 子棋盘
分割完一次后,我们可以 选择两个 子棋盘 中的一个 再继续 递归 操作

可以发现题目中给的这个图片,右边这个并不是递归下去做的:他对第一次分割的两个矩形又分别进行了分割(题目要求我们只能保留一个继续分割)
现需要把棋盘按照上述分割方案,分成 n 块(n−1 次划分操作)
求一个划分方案,使得各个子棋盘的 总分的均方差最小
思路:
本题如果用 动态规划 来分析,状态表示要至少开5维,记录分割操作的阶段,以及当前的棋盘状态
状态表示:
- 集合:将左上角坐标为 (x1, y1),右上角坐标为 (x2, y2) 的子矩阵切分成 k 部分的所有方案
- 属性:均方差(见题面中给出的公式)的最小值
状态计算:

以第一次切分为例:
对于横切从上往下一共可有 7 种不同的位置,每个位置切分之后都会有上下部分两种选择,因此共有 14 种可能
对于纵切是类似的,从左往右一共有 7 种不同的位置,每个位置切分之后会有左右部分两种选择,因此也有 14 种可能
现假设某一类方案如下:
在 xi 处横切,且选择上面部分,所有这类方案都可分为两部分:
- 继续选择上方部分切分的均方差的分值(根据定义 min=f(x1,y1,i,y2)min = f(x1, y1, i, y2)min=f(x1,y1,i,y2))
- 剩余部分均方差的分值(这是个定值,可结合“二维前缀和”在O(1)的复杂度内求得)
可得上述情况①的状态转移方程:dp[x1][y1][x2][y2][k]=min(dp[x1][y1][i][y2][k−1]+get(i+1,y1,x2,y2))dp[x1][y1][x2][y2][k] = min(dp[x1][y1][i][y2][k-1] + get(i+1, y1, x2, y2))dp[x1][y1][x2][y2][k]=min(dp[x1][y1][i][y2][k−1]+

本文探讨了一种解决8x8棋盘分割问题的方法,通过动态规划求解n-1次划分操作后的子棋盘均方差最小问题。利用横切和纵切策略,详细阐述了状态转移方程,并展示了如何结合二维前缀和求解过程。时间复杂度为O(n^5)。
&spm=1001.2101.3001.5002&articleId=124111318&d=1&t=3&u=3fd16ffcfc964b93a3c6245945fb2389)
1035

被折叠的 条评论
为什么被折叠?



