我需要解决这个问题:
输入是一个数字和一个三角形,例如:
5
#-##----#
-----#-
---#-
-#-
-
这个数字是三角形的行数。
我必须打印最大的“三角形面积”——由-
组成的最大三角形。对于这个问题,答案是9。
三角形也可以倒过来:
4
#-#-#--
#---#
##-
-
对于这个问题,输出是4。
我需要一些关于算法的帮助。请给我一点帮助,不要给我整个算法,因为我想自己尝试解决它,我只需要一个方向。
我需要解决这个问题:
输入是一个数字和一个三角形,例如:
5
#-##----#
-----#-
---#-
-#-
-
这个数字是三角形的行数。
我必须打印最大的“三角形面积”——由-
组成的最大三角形。对于这个问题,答案是9。
三角形也可以倒过来:
4
#-#-#--
#---#
##-
-
对于这个问题,输出是4。
我需要一些关于算法的帮助。请给我一点帮助,不要给我整个算法,因为我想自己尝试解决它,我只需要一个方向。
提示
我假设所有的三角形都是这种形式:
---
-
而不是:
- or - or -
--- -- --
- -
请注意,一个2单位的三角形由三个1单位的三角形组成。一个3单位的三角形由3个重叠的2单位三角形组成,以此类推。
下面的图示是一个由三个2单位三角形组成的3单位三角形,每个2单位三角形又由三个1单位三角形组成。
- -+ -+* +* * --- +++ ***
- + * ==> - + *
o o
剧透:完整算法如下,不要阅读
/!\ spoiler alert /!\
/!\ spoiler alert /!\
/!\ spoiler alert /!\
主要算法
首先,可以进行第一次计算以得出所有仅包含一个 -
的单元三角形。维护一个表格,其中 T[x,y]
表示三角形的大小(其边长)。在此步骤中,将每个单元格的初始值设为 1。T[x,y]
。T[x,y+1] = 1 + min(T[x-1,y], T[x,y], T[x+1,y])
最后,在您的表格 T
中找到最大的三角形,并计算相应的三角形面积。(公式留给读者作为练习)
复杂度为 O(n²)
。
+1
的原因。 - fjardon你可以通过忽略已发现三角形中的 -
来稍微提高其效率。但前提是它们必须是三角形底部行的一部分。
我不是算法专家,但由于你只是请求帮助而不是答案,我相信我可以提供一个答案。
你需要找出一种方法来测试一个空间是否在三角形内。一旦你有了这个,我会设计一个蛮力方法(对每个空间运行“三角形测试”)。
然后,当你有了一个蛮力解决方案(这不是最优的方法),尝试使其更有效率。 例如,在你有一个可行的解决方案之前,不要担心效率或聪明才智。 希望这能帮到你。