UVA1104 Chips Challenge】的更多相关文章

原题传送门 题目分析 给定一张n*n的芯片. '.'表示该格子可以放一个零件. 'C'表示该格子已经放了一个零件(不能拆下). '/'表示该格子不能放零件. 要求在芯片的现有基础上,放置尽可能多的零件,使得: 第i行与第i列零件数相等. 每行每列零件数<=总零件数*A/B. 条件1 考虑如何使得第i行第j列零件数相等. 首先可以想到经典的行列二分图模型,即\((i,j)\)如果可放置零件,则连边:如果必须放置零件,则记录其为必选.最后跑最大流即可. 然而这种模型的局限性就在于无法控制行列相等.…
一.题目 有一个 \(n\times n\) 的矩阵,每个元素可能是 ..C./ 的其中一种,分别表示可以放置芯片.已经放置了芯片.不能放置芯片,你可以分别决定是否可以放置芯片的位置放置芯片. 最后需要满足 \(\forall i\),第 \(i\) 行的芯片个数等于第 \(i\) 列的芯片个数,每一行的芯片个数都不超过总芯片个数的 \(\frac{A}{B}\),问在此情况下能额为放置的芯片个数最大值,如果怎么样都不合法输出 impossible \(n\leq 40\) 二.解法 如果直接做…
Chips Challenge Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 96    Accepted Submission(s): 33 Problem Description A prominent microprocessor company has enlisted your help to lay out some in…
题目链接 题意 网格上放点,有些强制放,有些不能放,有些可以放可以不放.要求: 第 \(i\) 行的点数 = 第 \(i\) 列的点数 每一行每一列的点数不超过总点数的 \(k\) 倍(\(k\) 已知,且不大于1) \(n <= 40\) 题解 最小割好题. 那么多行行列列肯定要将行列看作点,然后将各自看作边.首先第二个要求可以直接枚举,主要是第一个要求. 根据常见套路,我们可以先把所有点都放上,然后再拿走一些点.这样,放上的点有两种选择:留着或被拿走.因此我们连两种边:如果 \((i, j)…
Description A prominent microprocessor company has enlisted your help to lay out some interchangeable components(widgets) on some of their computer chips. Each chip’s design is an N × N square of slots. Oneslot can hold a single component, and you ar…
题目大意: 传送门 $n*n$的棋盘,有一些位置可以放棋子,有一些已经放了棋子,有一些什么都没有,也不能放,要求放置以后满足:第i行和第i列的棋子数相同,同时每行的棋子数占总数比例小于$\frac{A}{B}$.求最多可以放多少,无解则输出$impossible$. 题解:   Orz一发大佬——传送门. 先把整张图放满,题目就转化为最少删多少点就合法. 我们用$numx$来记录每行可以放的和已经放棋子总数,$numy$记录每列.从$S$向第i行连流量为$numx_i$的0费用边,从第j列向$T…
国际惯例题面:如果我们枚举放几个零件的话,第二个限制很容易解决,但是第一个怎么办?(好的,这么建图不可做)考虑我们枚举每行每列最多放几个零件t,然后计算零件总数sum.这样如果可行的话,则有t*B<=sum*A.考虑第一个限制怎么办.我们可以钦定所有可行的位置都放上零件,然后再把多的零件拆下来.我们令sxi为第i行能放的最多零件数,syi为第i列能放的最多零件数.由源点向每一行连流量sxi费用0的边,每一列向汇点连流量syi费用0的边.然后让每一行i向每一列i连流量t费用0的边,表示第i行和第j…
题面 数据范围看起来很像网络流诶(滚那 因为限制多而且强,数据范围也不大,我们考虑不直接求答案,而是转化为判定问题 可以发现第二个限制相对好满足,我们直接枚举这个限制就可以.具体来说是枚举所有行中的最大值$x$,然后下面那个式子移项就可以得到$a*tot>=b*x$,其中tot表示芯片的总数 然后发现第一个限制还是很强,不好满足.怎么办呢?正难则反,转化成补集的问题:先把所有能安的芯片都安了,然后扣出来合法的答案 那么现在我们要扣掉的芯片尽量少,同时还要先保证扣出来的结果合法,那考虑用最小费用最…
https://darkbzoj.cf/problem/2673 有一个芯片,芯片上有N*N(1≤N≤40)个插槽,可以在里面装零件. 有些插槽不能装零件,有些插槽必须装零件,剩下的插槽随意. 要求装好之后满足如下两条要求: 1.第 i 行和第 i 列的零件数目必须一样多(1≤i≤N). 2.第 i 行的零件数目不能超过总的零件数目的 A/B(1≤i≤N,0≤A≤B≤1000,B≠0). 求最多可以另外放多少个零件(就是除掉必须放的).如果无解输出impossible. zkw费用流就是像跑最大…
题意 给出一个n*n的网格,有些格子必须染成黑色,有些格子必须染成白色,其他格子可以染成黑色或者白色.要求最后第i行的黑格子数目等于第i列的黑格子数目,且某一行/列的格子数目不能超过格子总数的A/B. (把某个格子染黑等价于"在这个格子放一个芯片") n<=40 分析 假设一共用了X个芯片(包括'C'和'.'两种情况下放的),那么每行每列最多放的芯片个数Y=X*A/B可以算出来.发现不同的Y值最多有40个,我们可以考虑枚举每个Y值,Y值确定之后X有一个下界,我们考虑此时最多放下的…