【互补松弛定理】12.7.16省队集训

本文介绍了如何使用互补松弛定理解决一个矩阵优化问题,该问题涉及在攻击行和列以达到最小代价的同时满足特定次数要求。通过建立对偶问题,转化为最大费用最大流问题,并利用互补松弛定理来确定解决方案。讨论了如何通过差分约束系统简化问题,并分析了在残量网络上直接运行的可行性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

互补松弛定理

xi,yi分别为原问题和对偶问题的最优解,当且仅当

sigma(aij*yi | i=1~m)==cj or xi=0 j=1,2...,n

sigma(aij*xj | j=1~n)==bi or yi=0 i=1,2...m

题意:给一个n*n的矩阵,每次可以攻击一列或者一行,攻击一行的代价为Ai,攻击一列的代价为Bi,要求每个格子i,j至少被攻击F[i][j]次,要使得总代价最小,同时输出方案

第一次接触对偶定理就是这道题,那时候把对偶弄清楚了,但是互补松弛定理一直无法理解,不会输出方案就不了了之了...就对偶之后的建图来说,其实比日本那道题要简单一些

首先先把第一步的对偶定理做好,建立n+n个变量,lx1...lxn,ly1...lyn分别表示每行每列攻击了几次

则我们的目标是

min{(A1...An,B1....Bn)*(lx1...lyn)'}

约束条件

lxi+lyj>=F[i][j]

系数矩阵不好画就自己yy...

对偶之后化为

max{(y11...ynn)*(F[1][1]..F[n][n])'}

约束条件提取

sigma(yi | i=(k-1)*n+1~k*n)<=Ak

sigma(yi*n+k | i=1~n)<=Bk

然后根据这个建图

源点连出n个点,每条边容量为Ai,费用为0

n个点连向汇点,每条边容量为Bi,费用为0

中间连n*n条边,<i,j>,容量为oo,费用为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值