继续黑书上的DP题~
难得的一道中文题啊...
这里题意就不说啦
最后题目理解外加公式转化,就变成了:求8*8的矩形进行n次分割后每一块的平方和的最小值。
看黑书上的讲解,觉得递归就可以解决的。。。
后面码代码的时候发现,这不正好可以直接写成记忆化搜索嘛~
用dp[k][i][j][k][g] 表示分割进行到k次时,矩形的左上角的坐标为(i,j)到右下角的坐标为(k,g)时的最小值
所以每次都对矩形的长和宽进行枚举:
dp[k][i][j][k][g]=min(dp(k-1,i,j,a,g)+sum[a+1][j][k][g] , dp(k-1,a+1,j,k,g)+sum[i][j][a][g]); (i<=a<=k)
dp[k][i][j][k][g]=min(dp(k-1,i,j,k,b)+sum[i][b+1][k][g] ,dp(k-1,i,b+1,k,g)+sum[i][j][k][b] ); (j<=b<=g)
这样就可以求出dp[k][i][j][k][g];
每个状态都被dp数组记录下来了,这样在每次的递归调用中,如果这个状态已经被更新过,那么就不需要继续向下求值了,而是直接用dp数组记录的值即可。