gj,kg_{j,k} 表示当前这一行前 jj 个格子粉刷 kk 次得到的最大价值。

fi,jf_{i,j} 表示前 ii 行粉刷 jj 次得到的最大收益。

gj,k=maxp=1j{fp1,k1+max(sjsp1,jp+1sj+sp1)}fi,j=maxk=1min(j,m)fi1,jk+gm,k\begin{array}{} g_{j,k}=\max\limits_{p=1}^j\{f_{p-1,k-1}+\max(s_{j}-s_{p-1},j-p+1-s_{j}+s_{p-1})\} \\ f_{i,j}=\max\limits_{k=1}^{\min(j,m)}f_{i-1,j-k}+g_{m,k} \end{array}

时间复杂度为 O(nm2)O(nm^2)