线性规划 题解集

P6631 [ZJOI2020] 序列

题解

注意到原题是个整数规划,记所有操作的集合为 \(\mathcal{I}\),操作 \(i\) 的次数为 \(x_i\) 化成标准型如下:

\[\begin{align*} &\min\sum_{i\in\mathcal{I}}x_i\\ s.t.\ & \sum_{i\ni j}x_i=a_j & (q_j)\\ & x_i\ge 0, x_i\in \mathbb{Z} \end{align*} \]

注意到我们有几乎充分的理由认定该线性规划的约束矩阵 \(A\) 是一个全单模矩阵,故我们去掉 \(x_i\in\mathbb{Z}\) 的限制,做对偶,有

\[\begin{align*} &\max\sum_{i=1}^n a_iq_i\\ s.t.\ & \forall S\in\mathcal{I},\sum_{i\in S}q_i\le 1 \end{align*} \]

由全单模性,最有整数解存在,考虑操作 \(\{i\}\),有 \(a_i\le 1\),易证 \(a_i\rightarrow max(a_i,-1)\) 的替换是合法的,故 \(a_i\in\{-1,0,1\}\),动态规划即可,复杂度 \(O(n)\)

record

qoj5036 [集训队互测2022] 卑鄙的下毒人

题解

记前缀和为 \(b_{0...n}\) 即要求

\[\min k(b_n-b_0)+\sum\max(0,a_i-(b_{r_i}-b_{l_i-1}))\\ s.t.\ \forall i\in[0,n),b_{i+1}\ge b_i \]

注意到原题的目标函数和约束都为差分形式,考虑最大费用循环流的对偶:

\[\min\sum cap_e\max(0, cost_e-p_u+p_v)\\ \]

建图:

  • \(\text{goal}\leftarrow k(b_n-b_0)\)\(0\xrightarrow[cost=0]{cap=k} n\)
  • \(\text{goal}\leftarrow max(0,a_i-(b_{r_i}-b_{l_i-1}))\)\(r\xrightarrow[cost=a_i]{cap=1}l-1\)
  • \(\text{constrait}:b_{i+1}\ge b_i\)\(i+1\xrightarrow[cost=0]{cap=+\infin}i\)

观察图易知答案等价于选择 \(k\) 个互不相交的集合,集合内的区间互不相交,最大化权值和。

可以直接贪心算法,又或者去掉 \(0\xrightarrow[cost=0]{cap=k} n\),跑最大费用最大流,第一次增广由于是 DAG,按照拓扑序计算最短路,这之后使用 dijkstra algorithm。复杂度 \(O(km\log m)\)

record

CF1307G Cow and Exercise

题解

很容易利用差分约束将最短路写成线性规划形式:

\[\begin{gathered} \min d_t-d_s\\ s.t.\ d_v\le d_u+w_{uv}\\ d\ge 0 \end{gathered} \]

则本题的线性规划形式为

\[\begin{gathered} p^*=\min d_t-d_s\\ s.t.\ \ d_v-d_u-x_{uv}\le w_{uv} & (\alpha_{uv})\\ \sum x_{uv}\le x & (\beta)\\ d,x\ge 0 \end{gathered} \]

对偶为

\[\begin{gathered} d^*=\max x\beta+\sum w_{uv}\alpha_{uv}\\ s.t.\ \ \sum \alpha_{iu}-\sum\alpha_{ui}\ge0\ \ (i\notin \{s,t\})\\ \sum \alpha_{is}-\sum\alpha_{si}\ge-1\\ \sum \alpha_{it}-\sum\alpha_{ti}\ge1\\ -\alpha_{uv}+\beta\ge 0\\ \alpha,\beta\ge0 \end{gathered} \]

注意到可以构造 \(p^*\) 的一个最优解 \(d^*\) 满足 \(\forall i,d^*_i\ne 0\),由互补松弛定理有对任意 \(d^*\) 的最优解 \((\alpha,\beta)^*\),都有不等式一二三是紧的,则有

\[\begin{gathered} d^*=\max_{\alpha,\beta} x\beta+\sum w_{uv}\alpha_{uv}\\ s.t.\ \ \sum \alpha_{iu}-\sum\alpha_{ui}=0\ \ (i\notin \{s,t\})\\ \sum \alpha_{is}-\sum\alpha_{si}=-1\\ \sum \alpha_{it}-\sum\alpha_{ti}=1\\ \beta\ge \alpha_{uv}\\ \alpha,\beta\ge0 \end{gathered} \]

考虑先枚举 \(\beta\),记 \(\gamma=\frac{\alpha}{\beta}\),则有

\[\begin{gathered} f(\beta)=\max_\gamma \beta(x+\sum w_{uv}\gamma_{uv})\\ s.t.\ \ \sum\gamma_{iu}-\sum\gamma_{ui}=0\ \ (i\notin\{s,t\})\\ \sum\gamma_{is}-\sum\gamma_{si}=-\frac{1}{\beta}\\ \sum \gamma_{it}-\sum\gamma_{ti}=\frac{1}{\beta}\\ 0\le \gamma_{uv}\le 1 \end{gathered} \]

\(\theta=\frac{1}{\beta}\),则有 \(\displaystyle{\sum w_{uv}\gamma_{uv}}\) 为流量刚好为 \(\theta\) 时的最小费用流的费用大小,即要求

\[\max_\theta g(\theta)=\frac{x+[\text{mincost of flow}\ \theta]}{\theta} \]

注意到 \(\theta\) 是实数,但是如果取 \(\theta=v+\epsilon(\epsilon\in[0,1])\),则有在某个区间 \([v_0,v_0+1]\) 中,记当前未走满的增广路费用为 \(f\),已走满的增广路费用之和为 \(t\),则有

\[\begin{align*} \frac{\mathrm{d}g}{\mathrm d \epsilon}=(\frac{x+t+\epsilon f}{v_0+\epsilon})'=(\frac{c_0+\epsilon f}{v_0+\epsilon})'=\frac{v_0f-c_0}{(v_0+\epsilon)^2} \end{align*} \]

符号与 \(\epsilon\) 无关,在区间内单调,故最值总在整数处取到,预处理出流量为整数的费用,查询时取最好的即可。

record

posted @ 2023-04-15 18:49  Watware  阅读(190)  评论(0)    收藏  举报