利用二分图和DP解决的分配差值最小问题
这类题目的大致样子就是,对于一个可重集合,在满足一些不兼容的关系的情况下,将其分成两个可重集合,使得这两个集合的大小差值最小。
解决方法:
我们对这多组不兼容关系连边构成一个图,如果这个图是二分图的话,那么就表明可以分成两个部分,接下来对每个联通块的两个子集和$dp$,令$dp_{ij}$表示到第$i$个联通块的时候第一个集合大小是否可能为$j$,到最后遍历找差值最小即可。这样我们就可以在$O(n^2)$的时间内解决问题。
$Problem_1:$
2019 计蒜之道 初赛 第二场C
题意:
一个长度为$n$的数组$a$,把他拆分成两个严格递增的数组,使得这两个数组的长度差值最小。无解输出$-1$.
思路:
对于$i
对于有解的情况,我们对于图中的连通块进行$DP$,由于这个图是二分图,因此每个连通块都可以划分成最多两个不在同一阵营的子集,假设第$i$个连通块的两个子集大小分别为$w_{i1}$和$w_{i2},$由于确定好一个数组之后另一个也确定了,因此我们让$DP_{ij}$代表到第$i$个连通块时第一个数组的大小为$j$是否可行,最后我们遍历$DP_{num,k}$,其中$num$是连通块的个数,$k$代表第一个数组的个数,找到$|k-(n-k)|$最小的可行$k$即为答案。复杂度$O(n^2)$。
1 |
|
$Problem_2:$
2019ICPC西安邀请赛D: Miku and Generals
我们把每个联通快当作物品,价格为两部分的差值,然后01背包即可。
1 |
|