Pan*_*nda 4 java algorithm chess matrix
有 amxn 矩阵,每个矩阵都有整数元素。问题是我们必须在该矩阵上放置两个车,这样它们就不会相互攻击,并且放置车的元素的总和最大。
示例:假设矩阵是
2 5
1 3
Run Code Online (Sandbox Code Playgroud)
然后非攻击车只能放置在 2,3 或 1,5 元素位置。但是最大和是在 1,5 的情况下找到的,所以函数应该返回 1 + 5 = 6。
我认为我们可以一一遍历数组的所有对,然后返回我们找到的最大和,但我似乎找不到更好或有效的方法。我的解决方案是O(m * m * n * n)在复杂性方面。
什么是更好的方法?我将不胜感激任何帮助。
对于每一行,找到前 2 个值并记住找到它们的列。欧(百万)
对于每一列,找到前 2 个值并记住找到它们的行。欧(百万)
剩下的操作,我们只使用上面构建的两个列表。我们不会再看矩阵:
对于每一行,假装在该行和具有最高值的列中放置一辆汽车。对于每一列,将最高值与该列的最高值相加,除了车所在的列,我们与第二高的值相加。记住假车的行和总和最高的列。欧(百万)
重复,但使用第二高的值。欧(百万)
操作完成。O(mn) + O(mn) + O(mn) + O(mn) = O(mn)