设 f(i,j) 为 1 ~ i 格(j ~ i 同色)所得最大得分
f(i,i)=j=0maxi−1f(i−1,j+1)+Ai[Aj=Ai]
f(i,j)=f(i−1,j)+Ai[Ai=Ai−1] (j<i)
let Ei=Ai[Ai=Ai−1], Si=j=1∑iEi
f(i,j)=f(j,j)+k=j+1∑iEi=f∗(j)+Si−Sj
f∗(i)=f(i,i)=j=0maxi−1f(i−1,j+1)+Ai[Aj=Ai]=j=0maxi−1f∗(j+1)+Si−1−Sj+1+Ai[Aj=Ai]=Si−1+j=0maxi−1(g(j+1)+Ai[Aj=Ai])=Si−1+max{j=1maxig(j), Ai+j=0maxi−1[Aj=Ai]g(j+1)}
F(i)=j=1maxif(i,j)=j=1maxif∗(j)+Si−Sj=Si+j=1maxif∗(j)−Sj=Si+j=1maxig(j)
需要维护:
后者离散化后开数组存即可。