有一个n行n列的网格nxn。对于每一列j,给你一个数字Cj,对于每一行i,给你一个数字Ri。
您需要在网格上标记一些点,方法如下:
每行标记点数最多为ri;
每列标记点数最多为cj;
您标记了满足最后两个约束的最大点数,并返回该点的数量。
输入为:n(网格尺寸);ri的顺序和cj的顺序。
例如,在这个网格中,返回值是34
example
在线性时间内找到一个算法:O(n)或O(n log(n))并进行演示。
我找到了一个最大流量ALG的解决方案。但是复杂性太高了。

最佳答案

提示
我建议按从最大ri到最小ri的顺序遍历行。
记下我们每列有多少空间。空格数从给定的cj值开始。
对于每一行,根据列中当前的空格数在网格中标记尽可能多的点。请确保首先将点放置在空格数最大的列中。

关于algorithm - 网格约束的线性解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34018854/

10-12 22:42