由于互质关系不是传递的,所以尽量挂在树的最下面,刚好构成二叉树
f [ i ] [ j ] [ 0 ] f[i][j][0] f[i][j][0] 表示区间 [ i , j ] [i,j] [i,j] 以 i i i 为根,是否可以构成一棵树。
f [ i ] [ j ] [ 1 ] f[i][j][1] f[i][j][1] 表示区间 [ i , j ] [i,j] [i,j] 以 j j j 为根,是否可以构成一棵树。
首先,可以直接使用区间DP完成 O ( n 3 ) O(n^3) O(n3)。
但这题有一个更简单的实现:使得每个三角形都有顶点 1,可以得到最优答案:
∑ i = 2 n − 1 i ⋅ ( i + 1 ) \sum_{i=2}^{n-1}i\cdot(i+1) i=2∑n−1i⋅(i+1)
证明:
我们考虑边 ( 1 , n ) (1,n) (1,n) 可以构成一个三角形 [ 1 , n , x ] [1,n,x] [1,n,x](三角形的三个顶点)。
注意:将三角形 [ 1 , n , x ] [1,n,x] [1,n,x] 转换为 [ 1 , n , k ] ( k > x ) [1,n,k](k\gt x) [1,n,k](k>x),可以持续递推,直至 x = n − 1 x=n-1 x=n−1。
综上,我们可以将任意三角划分按照这个原则进行改进,且绝不会增加权值。
考虑任意一个区间 [ i , j ] [i,j] [i,j] 尚未连通,其子区间已经构成两个连通分量,可以选择:
(1)将 i i i 和 j j j 连接;
(2)不连 i i i 和 j j j,将中间某个结点连接。
上面两种方案没有交集,方案数直接相加即为 [ i , j ] [i,j] [i,j] 做成连通图的答案,不需要容斥。
令 f [ i ] [ j ] [ 0 ] f[i][j][0] f[i][j][0] 表示区间 [ i , j ] [i,j] [i,j] 连通且 i i i 和 j j j 不邻接的方案数; f [ i ] [ j ] [ 1 ] f[i][j][1] f[i][j][1] 表示区间 [ i , j ] [i,j] [i,j] 连通且 i i i 和 j j j 邻接的方案数。
令 f [ i ] [ j ] f[i][j] f[i][j] 为将区间 [ i , j ] [i,j] [i,j] 删除需要的最小魔法值消耗。
按两种情况考虑:
(1) s [ i ] = = s [ i + 1 ] s[i] == s[i+1] s[i]==s[i+1]
(2)枚举中间分割点 k k k