将k颗石子放在一个*m的格子上,每颗石子都应该在格子线的交点上。尝试找到一种放置石子的方法,以使每个角有一颗石子的矩形数量最大化. 输出号码。
例如,如果 k <= 3,则答案为 0,表示没有这样的矩形;如果 k 为 4 且 n, m >= 2,则答案为 1;更多示例:
(n, m, k, 答案): (3, 3, 8, 5), (4, 5, 13, 18), (7, 14, 86, 1398)
k 介于 0 和 n * m 之间。n, m 是小于 30000 的正整数
ps:这其实是微软编程之美资格赛的一个问题(但你可能找不到,因为它在中国举办,我自己翻译成英文。) pss:我已经取得了一些进展。可以证明,要得到答案,搜索所有可能的 Ferrers 图就足够了,但复杂度相对于 k 呈指数级。
编辑:(杜克林)
(3, 3, 8, 5) 的可视化,矩形以不同的颜色表示。
正如您所注意到的,它实际上是一个 (n-1) * (m-1) 网格,还有另一种解释是使用 * m 网格,其中石头放置在单元格内,但是您需要添加一个额外的约束,即矩形不能是宽度/高度 1。