算法竞赛进阶指南 0x50
AcWing 321. 棋盘分割
我开始设\(f[i][j][k]\)表示将\((1,1),(i,j)\)的矩形分割成\(k\)份的最小代价,但是这样有很多情况枚举不到,而且剩下的矩形只能是\((1,1),(k,l)\)
我们设\(f[i][j][k][l][d]\)表示将矩形\((i,j),(k,l)\)分割成\(d\)份,\(\sum_{i=1}^{d} (x_i-ave)^2\)的最小值.转移的话,就枚举最后分割出的完整的矩形。
Acwing 322. 消木块
神奇的状态表示:设\(f[l][r][len]\)表示对于区间\([l,r]\), \(l\)前面还剩下\(len\)个与\(a[l]\)颜色相同的木块,可以获得的最大价值。
转移:
1.将这\(len + 1\)个木块一块消除:\(f[l][r][len] = f[l + 1][r][0] + (len + 1) ^ 2\)
2.继续向右找到\(a[l] = a[k],f[l][r][len] = f[l + 1][k - 1][0] + f[k][r][len+1]\)
初始化 :\(f[l][l][len] = (len + 1) ^ 2\)