[BJWC2008]方程
文章部分内容参考 \(2016\) 国家集训队论文浅谈线性规划与对偶问题。
题意分析
首先整理题意:对于每次给定的 \(S_i,T_i\),求对于所有满足 \(\sum\limits_{j=1}^nA_jX_j=Si \wedge\sum\limits_{j=1}^nB_jX_j=T_i\) 的 \(X_j(j\in[1,n], j\in \Z)\),求 \(\sum\limits_{j=1}^nC_jX_j\) 的最大值。
问题求解
可以发现,这是一个线性规划模板题,甚至已经给出了标准型:
于是一个很自然的想法就出现了:用单纯形求解。(然后就愉快地收获了TLE。)
看一下问题出在哪:
用单纯形求解的核心操作是 \(\operatorname{pivot}\) 操作,其复杂度为 \(\operatorname{O}(NM')\),即 \(\operatorname{O}(N)\)(题目中 \(M'=3\),注意此处 \(M'\) 为约束的个数 \(+1\) 即矩阵的行数,并非题目中的询问个数),所以若设执行 \(\operatorname{pivot}\) 操作的次数为 \(k\),则算法的复杂度为 \(\operatorname{O}(kNM)\),显然无法通过本题。
然而上述分析中不难发现,本题的特殊之处在于 \(M'=3\),即约束只有两个,于是根据线性规划的对偶原理不难将包含 \(N\) 个变量的原问题转化为只包含 \(2\) 个变量的对偶问题:
而解法也要做出一些改变,因为单纯形法的复杂度在问题转化前后并没有差别。
在大部分人入门线性规划时就用过二元的线性规划做例题,很经典地,二元的线性规划问题可以通过做出所有的 \(n\) 条直线 \(A_ix+B_iy-C_i=0(i\in[1,n],i\in\Z)\) 分割出的半平面可行域,找到所有半平面的交集,问题就得到化简,变为在交集中找到一点,使得 \(Sx+Ty\) 最小。
处理细节方面考虑将询问离线,按照 \(S,T\) 对询问进行排序并处理。
这样处理的复杂度为 \(\operatorname{O}(n\log n)\),足以通过本题。
总结
对于线性规划问题,若一般方法无法求解,应该考虑将其转化,一般的转化方法为转化为对偶问题。这一题也提示做题者不应忽视简单的案例,二元线性规划最基本的作图这一解法也可以解决难题。