比较人性的一个题目。

考虑对于朴素的 DP,我们设 fif_i 表示以第 ii 个裂缝截止可以获得的答案,那么如果这个裂缝没有标记,转移方程就是:

fi=j=0i1fj×(ij)2f_i=\sum\limits_{j=0}^{i-1}f_{j}\times(i-j)^2

否则就有 fi=0f_i=0

显然对于一个 nn10910^9 的状态我们应该用矩阵乘法优化,那么直接的思路就是把特殊点分割的每一段都用矩阵乘法优化,所以现在只考虑 i+1i+1 不是特殊点的转移方法。

考虑对转移进行简单变形,得到:

fi+1=j=0ifj×(i+1j)2f_{i+1}=\sum\limits_{j=0}^{i} f_j\times(i+1-j)^2

fif_i 拿出来得到:

fi+1=fi+j=0i1fj×(ij+1)f_{i+1}=f_i+\sum\limits_{j=0}^{i-1} f_{j}\times (i-j+1)

打开后面的括号得到:

fi+1=fi+j=0i1fj×(ij)2+2j=0i1fj×(ij)+j=0i1fjf_{i+1}=f_i+\sum\limits_{j=0}^{i-1}f_{j}\times (i-j)^2+2\sum\limits_{j=0}^{i-1}f_j\times (i-j)+\sum\limits_{j=0}^{i-1}f_j

那么设:

ai=j=0i1fj, bi=j=0i1fj×(ij), ci=j=0i1fj×(ij)2a_i=\sum\limits_{j=0}^{i-1}f_j,\ b_i=\sum\limits_{j=0}^{i-1}f_j\times(i-j),\ c_i=\sum\limits_{j=0}^{i-1}f_j\times(i-j)^2

那么容易发现其实 fi=cif_i=c_i,所以分情况讨论得到:

如果 i+1i+1 不是特殊的:

  • ai+1=ai+cia_{i+1}=a_i+c_i
  • bi+1=ai+bi+cib_{i+1}=a_i+b_i+c_i
  • ci+1=ai+2bi+2cic_{i+1}=a_i+2b_i+2c_i

如果 i+1i+1 是特殊的:

  • ai+1=aia_{i+1}=a_i
  • bi+1=ai+bib_{i+1}=a_i+b_i
  • ci+1=ai+2bi+cic_{i+1}=a_i+2b_i+c_i

那么通过这个转移构建的矩阵如下,分别是不特殊和特殊:

[ai+1bi+1ci+1]=[aibici]×[101111122]\begin{bmatrix} a_{i+1} \\ b_{i+1} \\ c_{i+1} \end{bmatrix}=\begin{bmatrix} a_{i} \\ b_{i} \\ c_{i} \end{bmatrix}\times \begin{bmatrix} 1 &0 & 1\\ 1 & 1 & 1\\ 1 & 2 &2 \end{bmatrix}

[ai+1bi+1ci+1]=[aibici]×[100110121]\begin{bmatrix} a_{i+1} \\ b_{i+1} \\ c_{i+1} \end{bmatrix}=\begin{bmatrix} a_{i} \\ b_{i} \\ c_{i} \end{bmatrix}\times \begin{bmatrix} 1 &0 & 0\\ 1 & 1 & 0\\ 1 & 2 &1 \end{bmatrix}

时间复杂度为 O(mlogn)O(m\log n)