【发布时间】:2014-01-02 10:06:30
【问题描述】:
我正在学习算法考试,但找不到解决下一个问题的方法:
INPUT:正整数 r1,r2....rn 和 c1,c2....cn
输出:一个 n × n 矩阵 A 具有 0/1 个条目,使得对于所有 i 中的第 i 行的总和 如果存在这样的矩阵,A 是 ri,A 中第 i 列的和是 ci。 考虑以下逐行构造 A 的贪心算法。假设第一个 i-1 行已构建。设 aj 是前 i-1 行中第 j 列中 1 的数量。具有最大 cj-aj 的 ri 列在 row 中分配为 1,其余的 的列分配了 0。也就是说,仍然需要最多 1 的列被赋予 1。使用交换参数正式证明该算法是正确的。
因此,对于遇到的大多数贪婪问题,我尝试做的就是将其包含在归纳中, 假设贪心解决方案中直到第 i 行的行与最优解决方案相同,然后尝试更改第 i+1 行,使其匹配贪心解决方案并证明它不会创建不太理想的解决方案到最优给定。然后保持它进行 k-i 迭代,直到整个解决方案相似。
在尝试不成功后,我仅在每个坐标假设 ij 坐标是第一个不匹配的坐标并再次失败后尝试了相同的想法。
然后我尝试了一种不同的方法,假设我在贪婪中有一组步骤并交换了算法的整个步骤(这与第一个基本相同)但我仍然没有设法找到方法保证我没有创建一个不太理想的解决方案。
提前感谢您的帮助。
【问题讨论】:
标签: algorithm matrix swap greedy