声明:因为棋盘分割有多种版本,而每个版本的题目存在一定差异。下面这篇题解是以洛谷P1436的题面来写!
其实这道题一眼就可以看出是区间DP,只是原来一维的DP变成二维的即可。
对于一维的区间DP,我们是设 F [ i , j ] F[i,j] F[i,j] 为区间 [ i , j ] [i,j] [i,j] 的最值。同样在这里,又因为题目中要求切割 k k k 次,那我们就设 F [ i , j , x , y , t ] F[i,j,x,y,t] F[i,j,x,y,t] 为一个左上角的点为 ( i , j ) (i,j) (i,j),右下角的点为 ( x , y ) (x,y) (x,y) 的矩阵切割 k k k 次之后所能达到的最小值。先枚举切成几块,然后枚举左上的点,然后枚举右下的点,然后分两遍枚举横着切还是竖着切,然后更新最小值。
显然,最终答案就是 F [ 1 , 1 , 8 , 8 , k ] F[1,1,8,8,k] F[1,1,8,8,k],对于任意 F [ i , j , x , y , 1 ] ( i , j , x , y ∈ [ 1 , 8 ] ) F[i,j,x,y,1] (i,j,x,y \in [1,8]) F[i,j,x,y,1](i,j,x,y∈[1,8]),都为以点 ( i , j ) (i,j) (i,j) 为左上角、以点 ( x , y ) (x,y) (x,y) 为右下角的矩阵所有点的平方的和。
那么状态转移方程就可以写出来了:
F [ i , j , x , y , t ] = min { min {