废话
这大概是跟斜率优化一样神的东西qwq,但是证明复杂一点,以及似乎用到的题目也少一点,毕竟使用条件有点苛刻。
正题
它用来加速类似这样的 d p dp dp: f [ i ] [ j ] = min k = i j − 1 { f [ i ] [ k ] + f [ k + 1 ] [ j ] + w ( i , j ) } f[i][j]=\min_{k=i}^{j-1}\{f[i][k]+f[k+1][j]+w(i,j)\} f[i][j]=mink=ij−1{f[i][k]+f[k+1][j]+w(i,j)}。
每道题
d
p
dp
dp 不一样,不一定都是这种形式,这里只是以这种可能比较经典的作为例子。其中,
w
(
i
,
j
)
w(i,j)
w(i,j) 表示这一步操作的代价(贡献)。
特别的,设 f [ i ] [ i ] = w ( i , i ) = 0 f[i][i]=w(i,i)=0 f[i][i]=w(i,i)=0。
以及,虽然这个例子看起来很像区间 d p dp dp,但是四边形不等式优化的使用是不局限于区间 d p dp dp 的。
优化需要经过多步证明,都满足了就可以将这样的 O ( n 3 ) O(n^3) O(n3) 枚举优化到 O ( n 2 ) O(n^2) O(n2),实质上是优化了 k k k 的枚举。
使用步骤
- 证明 w w w 满足四边形不等式
- 证明 w w w 满足 w ( a , d ) ≥ w ( b , c ) ( a ≤ b ≤ c ≤ d ) w(a,d)\geq w(b,c)~(a\leq b\leq c\leq d) w(a,d)≥w(b,c) (a≤b≤c≤d)
- 利用 1 , 2 1,2 1,2 证明 f f f 满足四边形不等式
- 设 p ( i , j ) p(i,j) p(i,j) 表示 f [ i ] [ j ] f[i][j] f[i][j] 的最优决策点(也就是最优的 k k k),证明 p ( i , j − 1 ) ≤ p ( i , j ) ≤ p ( i + 1 , j ) p(i,j-1)\leq p(i,j)\leq p(i+1,j) p(i,j−1)≤p(i,j)≤p(i+1,j)
做完这四步后,根据最后证明出来的这个柿子,对于当前的 i , j i,j i,j,枚举 k k k 时只需要在 p ( i , j − 1 ) p(i,j-1) p(i,j−1) 到 p ( i + 1 , j ) p(i+1,j) p(i+1,j) 之间枚举就好,可以证明这样的时间复杂度为 O ( n 2 ) O(n^2) O(n2)(证明最后有)。
由于对于每一题的证明都不一样,所以下面只能讲一些用来帮助证明的定理和推论。
四边形不等式
假如对于任意 a ≤ b ≤ c ≤ d a\leq b\leq c\leq d a≤b≤c≤d,满足 w ( a , c ) + w ( b , d ) ≤ w ( b , c ) + w ( a , d ) w(a,c)+w(b,d)\leq w(b,c)+w(a,d) w(a,c)+w(b,d)≤w(b,c)+w(a,d),那么称 w w w 满足四边形不等式。(务必背下这个柿子qwq)
推论: 假如对于任意 a < c a<c a<c,满足 w ( a , c ) + w ( a + 1 , c + 1 ) ≤ w ( a + 1 , c ) + w ( a , c + 1 ) w(a,c)+w(a+1,c+1)\leq w(a+1,c)+w(a,c+1) w(a,c)+w(a+1,c+1)≤w(a+1,c)+w(a,c+1),那么 w w w 满足四边形不等式。
证明:
设
a
+
1
<
c
a+1<c
a+1<c,那么有
a
<
c
a<c
a<c,则有:
w
(
a
,
c
)
+
w
(
a
+
1
,
c
+
1
)
≤
w
(
a
+
1
,
c
)
+
w
(
a
,
c
+
1
)
(
1
)
w(a,c)+w(a+1,c+1)\leq w(a+1,c)+w(a,c+1)~~(1)
w(a,c)+w(a+1,c+1)≤w(a+1,c)+w(a,c+1) (1)
因为
a
+
1
<
c
a+1<c
a+1<c,所以有:
w
(
a
+
1
,
c
)
+
w
(
a
+
2
,
c
+
1
)
≤
w
(
a
+
2
,
c
)
+
w
(
a
+
1
,
c
+
1
)
(
2
)
w(a+1,c)+w(a+2,c+1)\leq w(a+2,c)+w(a+1,c+1)~~(2)
w(a+1,c)+w(a+2,c+1)≤w(a+2,c)+w(a+1,c+1) (2)
(
1
)
(
2
)
(1)(2)
(1)(2)两式相加,消去左右相同的项,得到:
w
(
a
,
c
)
+
w
(
a
+
2
,
c
+
1
)
≤
w
(
a
+
2
,
c
)
+
w
(
a
,
c
+
1
)
(
3
)
w(a,c)+w(a+2,c+1)\leq w(a+2,c)+w(a,c+1)~~(3)
w(a,c)+w(a+2,c+1)≤w(a+2,c)+w(a,c+1) (3)
(
3
)
(3)
(3) 式相比
(
1
)
(1)
(1) 式,就是
a
+
1
a+1
a+1 都变成了
a
+
2
a+2
a+2,以此类推下去,就可以变成任意
a
+
k
a+k
a+k,设
b
=
a
+
k
b=a+k
b=a+k,于是有:
w
(
a
,
c
)
+
w
(
b
,
c
+
1
)
≤
w
(
b
,
c
)
+
w
(
a
,
c
+
1
)
w(a,c)+w(b,c+1)\leq w(b,c)+w(a,c+1)
w(a,c)+w(b,c+1)≤w(b,c)+w(a,c+1)
同理,可以将
c
+
1
c+1
c+1 推广到任意
c
+
k
′
c+k'
c+k′,设
d
=
c
+
k
′
d=c+k'
d=c+k′,那么就有:
w
(
a
,
c
)
+
w
(
b
,
d
)
≤
w
(
b
,
c
)
+
w
(
a
,
d
)
w(a,c)+w(b,d)\leq w(b,c)+w(a,d)
w(a,c)+w(b,d)≤w(b,c)+w(a,d)
证毕。
利用这个推论,可以更便捷地进行步骤 1 1 1。
步骤 2 2 2 就没啥好讲的了,这个完全因题而异。
步骤 3 3 3 的话以上面的范例 d p dp dp 方程为例证明一波(这个也是因题而异的):
证明的话利用上面的推论,也就是证明对于任意 a < c a<c a<c,都满足 f [ a ] [ c ] + f [ a + 1 ] [ c + 1 ] ≤ f [ a ] [ c + 1 ] + f [ a + 1 ] [ c ] f[a][c]+f[a+1][c+1]\leq f[a][c+1]+f[a+1][c] f[a][c]+f[a+1][c+1]≤f[a][c+1]+f[a+1][c]。
先考虑
a
+
1
=
c
a+1=c
a+1=c 的情况,此时有:
f
[
a
]
[
c
]
+
f
[
a
+
1
]
[
c
+
1
]
=
f
[
a
]
[
a
+
1
]
+
f
[
a
+
1
]
[
a
+
2
]
=
w
(
a
,
a
+
1
)
+
w
(
a
+
1
,
a
+
2
)
f
[
a
]
[
c
+
1
]
+
f
[
a
+
1
]
[
c
]
=
f
[
a
]
[
a
+
2
]
+
f
[
a
+
1
]
[
a
+
1
]
=
f
[
a
]
[
a
+
2
]
f[a][c]+f[a+1][c+1]=f[a][a+1]+f[a+1][a+2]=w(a,a+1)+w(a+1,a+2)\\ f[a][c+1]+f[a+1][c]=f[a][a+2]+f[a+1][a+1]=f[a][a+2]
f[a][c]+f[a+1][c+1]=f[a][a+1]+f[a+1][a+2]=w(a,a+1)+w(a+1,a+2)f[a][c+1]+f[a+1][c]=f[a][a+2]+f[a+1][a+1]=f[a][a+2]
f
[
a
]
[
a
+
2
]
f[a][a+2]
f[a][a+2] 的决策点只有两个,假如
f
[
a
]
[
a
+
2
]
f[a][a+2]
f[a][a+2] 的最优决策点为
a
a
a,那么
f
[
a
]
[
a
+
2
]
=
f
[
a
]
[
a
]
+
f
[
a
+
1
]
[
a
+
2
]
+
w
(
a
,
a
+
2
)
=
w
(
a
+
1
,
a
+
2
)
+
w
(
a
,
a
+
2
)
f[a][a+2]=f[a][a]+f[a+1][a+2]+w(a,a+2)=w(a+1,a+2)+w(a,a+2)
f[a][a+2]=f[a][a]+f[a+1][a+2]+w(a,a+2)=w(a+1,a+2)+w(a,a+2)
假如最优决策点为
a
+
1
a+1
a+1,那么
f
[
a
]
[
a
+
2
]
=
f
[
a
]
[
a
+
1
]
+
f
[
a
+
2
]
[
a
+
2
]
+
w
(
a
,
a
+
2
)
=
w
(
a
,
a
+
1
)
+
w
(
a
,
a
+
2
)
f[a][a+2]=f[a][a+1]+f[a+2][a+2]+w(a,a+2)=w(a,a+1)+w(a,a+2)
f[a][a+2]=f[a][a+1]+f[a+2][a+2]+w(a,a+2)=w(a,a+1)+w(a,a+2)
因为
w
w
w 满足步骤
2
2
2 中的性质,所以有:
w
(
a
+
1
,
a
+
2
)
+
w
(
a
,
a
+
2
)
≥
w
(
a
,
a
+
1
)
+
w
(
a
+
1
,
a
+
2
)
w
(
a
,
a
+
1
)
+
w
(
a
,
a
+
2
)
≥
w
(
a
,
a
+
1
)
+
w
(
a
+
1
,
a
+
2
)
w(a+1,a+2)+w(a,a+2)\geq w(a,a+1)+w(a+1,a+2)\\ w(a,a+1)+w(a,a+2)\geq w(a,a+1)+w(a+1,a+2)
w(a+1,a+2)+w(a,a+2)≥w(a,a+1)+w(a+1,a+2)w(a,a+1)+w(a,a+2)≥w(a,a+1)+w(a+1,a+2)
也就是说,无论
f
[
a
]
[
a
+
2
]
f[a][a+2]
f[a][a+2] 的决策点在哪里,都满足:
f
[
a
]
[
a
+
2
]
≥
w
(
a
,
a
+
1
)
+
w
(
a
+
1
,
a
+
2
)
f[a][a+2]\geq w(a,a+1)+w(a+1,a+2)
f[a][a+2]≥w(a,a+1)+w(a+1,a+2)
即:
f
[
a
]
[
c
]
+
f
[
a
+
1
]
[
c
+
1
]
≤
f
[
a
]
[
c
+
1
]
+
f
[
a
+
1
]
[
c
]
f[a][c]+f[a+1][c+1]\leq f[a][c+1]+f[a+1][c]
f[a][c]+f[a+1][c+1]≤f[a][c+1]+f[a+1][c]
证明完了 a + 1 = c a+1=c a+1=c 的情况,我们接下来要推广到 a + k = c a+k=c a+k=c 的情况,假设此时 a + o = c ( 1 ≤ o < k ) a+o=c~(1\leq o < k) a+o=c (1≤o<k) 的情况我们都证完了。
设
f
[
a
+
1
]
[
c
]
f[a+1][c]
f[a+1][c] 和
f
[
a
]
[
c
+
1
]
f[a][c+1]
f[a][c+1] 的最优决策分别为
x
,
y
x,y
x,y,那么有:
f
[
a
+
1
]
[
c
]
+
f
[
a
]
[
c
+
1
]
=
f
[
a
+
1
]
[
x
]
+
f
[
x
+
1
]
[
c
]
+
w
(
a
+
1
,
c
)
+
f
[
a
]
[
y
]
+
f
[
y
+
1
]
[
c
+
1
]
+
w
(
a
,
c
+
1
)
f[a+1][c]+f[a][c+1]=\\ f[a+1][x]+f[x+1][c]+w(a+1,c)~~+~~f[a][y]+f[y+1][c+1]+w(a,c+1)
f[a+1][c]+f[a][c+1]=f[a+1][x]+f[x+1][c]+w(a+1,c) + f[a][y]+f[y+1][c+1]+w(a,c+1)
这个决策对于 f [ a ] [ c ] f[a][c] f[a][c] 和 f [ a + 1 ] [ c + 1 ] f[a+1][c+1] f[a+1][c+1] 不一定是最优的,此时我们需要分类讨论:
当
x
≤
y
x\leq y
x≤y 时,有:
f
[
a
]
[
c
]
+
f
[
a
+
1
]
[
c
+
1
]
≤
f
[
a
]
[
x
]
+
f
[
x
+
1
]
[
c
]
+
w
(
a
,
c
)
+
f
[
a
+
1
]
[
y
]
+
f
[
y
+
1
]
[
c
+
1
]
+
w
(
a
+
1
,
c
+
1
)
f[a][c]+f[a+1][c+1]\leq\\ f[a][x]+f[x+1][c]+w(a,c)~~+~~f[a+1][y]+f[y+1][c+1]+w(a+1,c+1)
f[a][c]+f[a+1][c+1]≤f[a][x]+f[x+1][c]+w(a,c) + f[a+1][y]+f[y+1][c+1]+w(a+1,c+1)
用上面的柿子减下面的柿子,可以得到:
(
f
[
a
+
1
]
[
c
]
+
f
[
a
]
[
c
+
1
]
)
−
(
f
[
a
]
[
c
]
+
f
[
a
+
1
]
[
c
+
1
]
)
≥
(
f
[
a
+
1
]
[
x
]
+
f
[
a
]
[
y
]
)
−
(
f
[
a
]
[
x
]
+
f
[
a
+
1
]
[
y
]
)
(
1
)
+
(
w
(
a
+
1
,
c
)
+
w
(
a
,
c
+
1
)
)
−
(
w
(
a
,
c
)
+
w
(
a
+
1
,
c
+
1
)
)
(
2
)
(f[a+1][c]+f[a][c+1])-(f[a][c]+f[a+1][c+1])\geq\\ (f[a+1][x]+f[a][y])-(f[a][x]+f[a+1][y])~~(1)\\ +(w(a+1,c)+w(a,c+1))-(w(a,c)+w(a+1,c+1))~~(2)
(f[a+1][c]+f[a][c+1])−(f[a][c]+f[a+1][c+1])≥(f[a+1][x]+f[a][y])−(f[a][x]+f[a+1][y]) (1)+(w(a+1,c)+w(a,c+1))−(w(a,c)+w(a+1,c+1)) (2)
根据假设,因为
a
+
o
=
c
(
1
≤
o
<
k
)
a+o=c~(1\leq o<k)
a+o=c (1≤o<k) 的情况我们都证完了,所以有:
f
[
a
+
1
]
[
x
]
+
f
[
a
]
[
y
]
≥
f
[
a
]
[
x
]
+
f
[
a
+
1
]
[
y
]
f[a+1][x]+f[a][y]\geq f[a][x]+f[a+1][y]
f[a+1][x]+f[a][y]≥f[a][x]+f[a+1][y]
因为
w
w
w 也满足四边形不等式,所以
w
w
w 也有:
w
(
a
+
1
,
c
)
+
w
(
a
,
c
+
1
)
≥
w
(
a
,
c
)
+
w
(
a
+
1
,
c
+
1
)
w(a+1,c)+w(a,c+1)\geq w(a,c)+w(a+1,c+1)
w(a+1,c)+w(a,c+1)≥w(a,c)+w(a+1,c+1)
根据这两条柿子,就可以证明上面那条柿子的部分
(
1
)
(1)
(1) 和部分
(
2
)
(2)
(2) 都大于
0
0
0,所以最终得到:
(
f
[
a
+
1
]
[
c
]
+
f
[
a
]
[
c
+
1
]
)
−
(
f
[
a
]
[
c
]
+
f
[
a
+
1
]
[
c
+
1
]
≥
0
f
[
a
+
1
]
[
c
]
+
f
[
a
]
[
c
+
1
]
≥
f
[
a
]
[
c
]
+
f
[
a
+
1
]
[
c
+
1
]
(f[a+1][c]+f[a][c+1])-(f[a][c]+f[a+1][c+1]\geq 0\\ f[a+1][c]+f[a][c+1]\geq f[a][c]+f[a+1][c+1]
(f[a+1][c]+f[a][c+1])−(f[a][c]+f[a+1][c+1]≥0f[a+1][c]+f[a][c+1]≥f[a][c]+f[a+1][c+1]
于是证出来了 f f f 满足四边形不等式的推论,从而 f f f 满足四边形不等式。
当
x
>
y
x>y
x>y 时,有
f
[
a
]
[
c
]
+
f
[
a
+
1
]
[
c
+
1
]
≤
f
[
a
]
[
y
]
+
f
[
y
+
1
]
[
c
]
+
w
(
a
,
c
)
+
f
[
a
+
1
]
[
x
]
+
f
[
x
+
1
]
[
c
+
1
]
+
w
(
a
+
1
,
c
+
1
)
f[a][c]+f[a+1][c+1]\leq\\ f[a][y]+f[y+1][c]+w(a,c)+f[a+1][x]+f[x+1][c+1]+w(a+1,c+1)
f[a][c]+f[a+1][c+1]≤f[a][y]+f[y+1][c]+w(a,c)+f[a+1][x]+f[x+1][c+1]+w(a+1,c+1)
上式减下式得到:
f
[
a
+
1
]
[
c
]
+
f
[
a
]
[
c
+
1
]
−
f
[
a
]
[
c
]
−
f
[
a
+
1
]
[
c
+
1
]
=
f
[
x
+
1
]
[
c
]
+
w
(
a
+
1
,
c
)
+
f
[
y
+
1
]
[
c
+
1
]
+
w
(
a
,
c
+
1
)
−
f
[
y
+
1
]
[
c
]
−
w
(
a
,
c
)
−
f
[
x
+
1
]
[
c
+
1
]
−
w
(
a
+
1
,
c
+
1
)
f[a+1][c]+f[a][c+1]-f[a][c]-f[a+1][c+1]=\\ f[x+1][c]+w(a+1,c)+f[y+1][c+1]+w(a,c+1)\\ -f[y+1][c]-w(a,c)-f[x+1][c+1]-w(a+1,c+1)
f[a+1][c]+f[a][c+1]−f[a][c]−f[a+1][c+1]=f[x+1][c]+w(a+1,c)+f[y+1][c+1]+w(a,c+1)−f[y+1][c]−w(a,c)−f[x+1][c+1]−w(a+1,c+1)
剩下的跟上面套路一样了。
最优决策点
进入最后的重头戏,证明 p ( i , j − 1 ) ≤ p ( i , j ) ≤ p ( i + 1 , j ) p(i,j-1)\leq p(i,j)\leq p(i+1,j) p(i,j−1)≤p(i,j)≤p(i+1,j)。
设 p ( i , j ) = p p(i,j)=p p(i,j)=p, k k k 满足 p < k < j p<k<j p<k<j。
当
f
[
i
]
[
j
−
1
]
f[i][j-1]
f[i][j−1] 的决策点分别为
p
p
p 和
k
k
k 时,有:
p
:
f
[
i
]
[
j
−
1
]
=
f
[
i
]
[
p
]
+
f
[
p
+
1
]
[
j
−
1
]
+
w
(
i
,
j
−
1
)
k
:
f
[
i
]
[
j
−
1
]
=
f
[
i
]
[
k
]
+
f
[
k
+
1
]
[
j
−
1
]
+
w
(
i
,
j
−
1
)
p:~f[i][j-1]=f[i][p]+f[p+1][j-1]+w(i,j-1)\\ k:~f[i][j-1]=f[i][k]+f[k+1][j-1]+w(i,j-1)
p: f[i][j−1]=f[i][p]+f[p+1][j−1]+w(i,j−1)k: f[i][j−1]=f[i][k]+f[k+1][j−1]+w(i,j−1)
相减得到:
f
[
i
]
[
p
]
+
f
[
p
+
1
]
[
j
−
1
]
−
f
[
i
]
[
k
]
−
f
[
k
+
1
]
[
j
−
1
]
=
f
[
i
]
[
p
]
−
f
[
i
]
[
k
]
+
f
[
p
+
1
]
[
j
−
1
]
−
f
[
k
+
1
]
[
j
−
1
]
(
1
)
f[i][p]+f[p+1][j-1]-f[i][k]-f[k+1][j-1]\\ =f[i][p]-f[i][k]+f[p+1][j-1]-f[k+1][j-1]~~(1)
f[i][p]+f[p+1][j−1]−f[i][k]−f[k+1][j−1]=f[i][p]−f[i][k]+f[p+1][j−1]−f[k+1][j−1] (1)
当
f
[
i
]
[
j
]
f[i][j]
f[i][j] 的决策点分别为
p
p
p 和
k
k
k 时,有:
p
:
f
[
i
]
[
j
]
=
f
[
i
]
[
p
]
+
f
[
p
+
1
]
[
j
]
+
w
(
i
,
j
)
k
:
f
[
i
]
[
j
]
=
f
[
i
]
[
k
]
+
f
[
k
+
1
]
[
j
]
+
w
(
i
,
j
)
p:~f[i][j]=f[i][p]+f[p+1][j]+w(i,j)\\ k:~f[i][j]=f[i][k]+f[k+1][j]+w(i,j)
p: f[i][j]=f[i][p]+f[p+1][j]+w(i,j)k: f[i][j]=f[i][k]+f[k+1][j]+w(i,j)
因为
p
p
p 对于
f
[
i
]
[
j
]
f[i][j]
f[i][j] 而言是最优决策点,所以有:
f
[
i
]
[
p
]
+
f
[
p
+
1
]
[
j
]
≤
f
[
i
]
[
k
]
+
f
[
k
+
1
]
[
j
]
f
[
i
]
[
p
]
−
f
[
i
]
[
k
]
≤
f
[
k
+
1
]
[
j
]
−
f
[
p
+
1
]
[
j
]
f[i][p]+f[p+1][j]\leq f[i][k]+f[k+1][j]\\ f[i][p]-f[i][k]\leq f[k+1][j]-f[p+1][j]
f[i][p]+f[p+1][j]≤f[i][k]+f[k+1][j]f[i][p]−f[i][k]≤f[k+1][j]−f[p+1][j]
将这个这个柿子代入
(
1
)
(1)
(1) 式,得到:
(
1
)
≤
f
[
p
+
1
]
[
j
−
1
]
−
f
[
k
+
1
]
[
j
−
1
]
+
f
[
k
+
1
]
[
j
]
−
f
[
p
+
1
]
[
j
]
(
1
)
≤
(
f
[
p
+
1
]
[
j
−
1
]
+
f
[
k
+
1
]
[
j
]
)
−
(
f
[
k
+
1
]
[
j
−
1
]
+
f
[
p
+
1
]
[
j
]
)
(1)\leq f[p+1][j-1]-f[k+1][j-1]+f[k+1][j]-f[p+1][j]\\ (1)\leq (f[p+1][j-1]+f[k+1][j])-(f[k+1][j-1]+f[p+1][j])
(1)≤f[p+1][j−1]−f[k+1][j−1]+f[k+1][j]−f[p+1][j](1)≤(f[p+1][j−1]+f[k+1][j])−(f[k+1][j−1]+f[p+1][j])
诶,这就是个四边形不等式嘛~
因为
f
[
p
+
1
]
[
j
−
1
]
+
f
[
k
+
1
]
[
j
]
≤
f
[
k
+
1
]
[
j
−
1
]
+
f
[
p
+
1
]
[
j
]
f[p+1][j-1]+f[k+1][j]\leq f[k+1][j-1]+f[p+1][j]
f[p+1][j−1]+f[k+1][j]≤f[k+1][j−1]+f[p+1][j]
所以,最终得到 ( 1 ) ≤ 0 (1)\leq 0 (1)≤0。
这意味着,任意满足 p < k < j p<k<j p<k<j 的 k k k,对于 f [ i ] [ j − 1 ] f[i][j-1] f[i][j−1] 而言,都不如 p p p 这个决策点优,所以 f [ i ] [ j − 1 ] f[i][j-1] f[i][j−1] 的决策点肯定小于等于 p p p,即 p ( i , j − 1 ) ≤ p ( i , j ) p(i,j-1)\leq p(i,j) p(i,j−1)≤p(i,j)。
同理可以得到 p ( i , j ) ≤ p ( i + 1 , j ) p(i,j)\leq p(i+1,j) p(i,j)≤p(i+1,j)。
证毕。
时间复杂度
原先需要三层枚举 i , j , k i,j,k i,j,k,现在也是,不过 k k k 的枚举范围发生了变化,设 l e n = j − i len=j-i len=j−i,然后观察一下 k k k 的枚举范围:
- f [ i + 0 ] [ i + l e n + 0 ] f[i+0][i+len+0] f[i+0][i+len+0] 的 k k k 的枚举范围是 p ( i + 0 , i + l e n − 1 ) p(i+0,i+len -1) p(i+0,i+len−1) 到 p ( i + 1 , i + l e n + 0 ) p(i+1,i+len+0) p(i+1,i+len+0)
- f [ i + 1 ] [ i + l e n + 1 ] f[i+1][i+len+1] f[i+1][i+len+1] 的 k k k 的枚举范围是 p ( i + 1 , i + l e n + 0 ) p(i+1,i+len+0) p(i+1,i+len+0) 到 p ( i + 2 , i + l e n + 1 ) p(i+2,i+len+1) p(i+2,i+len+1)
- f [ i + 2 ] [ i + l e n + 2 ] f[i+2][i+len+2] f[i+2][i+len+2] 的 k k k 的枚举范围是 p ( i + 2 , i + l e n + 1 ) p(i+2,i+len+1) p(i+2,i+len+1) 到 p ( i + 3 , i + l e n + 2 ) p(i+3,i+len+2) p(i+3,i+len+2)
- ……
可以发现,当 l e n len len 固定时, f [ i + k + 1 ] [ i + l e n + k + 1 ] f[i+k+1][i+len+k+1] f[i+k+1][i+len+k+1] 的枚举范围的起点就是 f [ i + k ] [ i + l e n + k ] f[i+k][i+len+k] f[i+k][i+len+k] 的枚举范围的终点。
由于对于任意 i < j i<j i<j,满足 1 ≤ p ( i , j ) < n 1\leq p(i,j)<n 1≤p(i,j)<n,所以,当 l e n len len 固定时, k k k 实际上也就是从 1 1 1 枚举到了 n n n,于是时间复杂度只有 O ( n 2 ) O(n^2) O(n2)。
题表
可能以后还会更新吧……