前言
这个结果是可做题, 赛时没猜出来, e
本质上还是 \(\rm{T1}\) 性质猜错了导致的, 都怪 \(\rm{T1}\)
- 先从已经确定的部分开始考虑
- 拆分序列法
- 一般从可以严格分成两部分来考虑
- 拆分点可以确定状态
- 分开的子问题尽量少
- 分成两个同性质的串加上一个构造 \((\)例如 \((X)Y\) 用于构造新的合法括号串\()\)
- 分成两个同性质的串, 递归分治
- 一般从可以严格分成两部分来考虑
- 拆分序列法
思路
传统开猜
对于 \(A_i\) , 与其相关的 \(B\) 部分为 \(i, \left\lfloor \dfrac{i}{2} \right\rfloor\)
这个形式其实见过, 就在几天前的 \(\rm{CF}\), 也就是对于 \(2k, 2k + 1\) , 对应的都是一个东西
但是放到这个题中好像没什么用
先套进去找性质
\[ \begin{align*}
&\sum_{i = 2}^{n} A_i \times \Big(B_i \otimes B_{\left\lfloor \large\frac{n}{2} \right\rfloor}\Big)\\
\end{align*} \]
可以拆分成
\[ \begin{align*}
&\sum_{k = 1}^{\large\frac{n}{2}} A_{2k} \times \Big(B_{2k} \otimes B_{k}\Big) + A_{2k + 1} \times \Big(B_{2k + 1} \otimes B_{k}\Big)\\
\end{align*} \]
观察到一个性质, 对于 \(B_1\) , 其只与 下标 \(2, 3\) 有关, 如果我们确定了 \(B_1\) , 那么剩下两部分毫不相干
考虑一直分治下去, 每次枚举 \(B_1\) 取值, 然后枚举两端 \(1\) 的个数, 传下去做
似乎你也可以找其他的 \(B\) 进行分治, 但是发现因为其他部分都和 \(A\) 相关, 不好处理, 而分治前提就是拆分点可以确定状态和分开的子问题尽量少
当然这里有一种更易于理解的方法, \(k, 2k, 2k + 1\) 组成了一颗二叉树形式, 在上面处理即可
分析一下分治的复杂度
每一个位置都要枚举 \(\mathcal{O} (n^2)\) , 一共 \(n\) 个位置, 总共 \(\mathcal{O} (n^3)\)
逐层合并最优解总比一次全部枚举最优解好上不少
总结
- \(\left\lfloor \dfrac{i}{2} \right\rfloor\) 的性质
- 对于 \(2k, 2k + 1\) , 对应的都是一个东西
数据比较小的
- 计数型问题
- 最优型问题
也许可以考虑拆分序列法
- 求系数数组使得对于一个序列其权值最值化
- 观察对于原序列中一个位置对应哪些系数
- 固定常数个系数
往往找到其树形结构方便拆分
- 固定常数个系数
- 观察对于原序列中一个位置对应哪些系数