Algorithm 三角形算法

Algorithm 三角形算法,algorithm,Algorithm,我有一个问题要解决: 输入为数字和三角形,例如: 5 #-##----# -----#- ---#- -#- - 数字是三角形的行数 我必须打印最大的“三角形区域”——由-构成的最大三角形。对于这个问题,答案是9 三角形也可以倒置: 4 #-#-#-- #---# ##- - 为此,输出为4 我需要一些算法方面的帮助。请给我一点帮助,而不是整个算法,因为我想自己解决它,我只需要一个方向。如果效率没有那么重要: 有一个循环搜索候选对象(它从左到右遍历每一行)。如

我有一个问题要解决:

输入为数字和三角形,例如:

5
#-##----#
 -----#-
  ---#-
   -#-
    -
数字是三角形的行数

我必须打印最大的“三角形区域”——由
-
构成的最大三角形。对于这个问题,答案是9

三角形也可以倒置:

4
#-#-#--
 #---#
  ##-
   -
为此,输出为4


我需要一些算法方面的帮助。请给我一点帮助,而不是整个算法,因为我想自己解决它,我只需要一个方向。

如果效率没有那么重要:

有一个循环搜索候选对象(它从左到右遍历每一行)。如果您找到一个
-
中断搜索并尝试计算该候选对象

因此,首先向右移动,检查其结束的位置(
#
)。然后你知道你的三角形(索引)的底部,直接知道它必须在下一行中继续,检查并重复,直到你完全探索了这个候选者。如果左indix为
li
,右
ri
row
,则三角形必须在索引
li+1
ri-1
处的下一
行*行+1
中继续

存储其大小并再次继续搜索零件一旦搜索访问了所有行就终止



通过忽略已发现三角形的一部分,可以稍微提高其效率。但只有当它们是三角形基准行的一部分时

我不是算法专家,但由于您只要求一些帮助,而不是答案,我相信我可以提交答案

您需要找出一种方法来测试空间,以确定它是否在三角形内。一旦你知道了,我会设计一个蛮力方法(对每个空间运行“三角形测试”)

然后,当你有一个暴力解决方案(这不是一个最佳的方法)时,试着让它更有效。 在你找到有效的解决方案之前,不要担心自己是否高效或聪明。 希望有帮助。

提示

 /!\ spoiler alert /!\

 /!\ spoiler alert /!\

 /!\ spoiler alert /!\
我假设所有三角形的形式如下:

--- 
 - 
而不是像:

 -    or  -    or    -
---       --        --
          -          -
请注意,2单位三角形由三个1单位三角形组成。3单元三角形由3个重叠的2单元三角形组成,依此类推

下一个图是一个由三个2单元三角形组成的3单元三角形示例,其本身由三个1单元三角形组成

  - -+ -+* +* *            --- +++ ***
     -  +  *      ==>       -   +   *
        o                       o
扰流板:请遵循完整的算法,不要阅读它

 /!\ spoiler alert /!\

 /!\ spoiler alert /!\

 /!\ spoiler alert /!\
主算法

您可以执行第一步来计算所有单位大小的三角形(内部正好有1个
-
)。维护一个表格,其中
T[x,y]
是三角形的大小(其边的长度)。在此过程中,使用
-
将每个单元格初始化为1

然后,您可以从上到下,尝试构建更复杂的三角形

当在位置[x,y]时,你应该考虑下端的三角形:

  • [x-1,y-1]
  • [x,y-1]
  • [x+1,y-1]
新三角形的大小将为1加上上述3个三角形中任何一个的最小大小。然后更新表
T[x,y]

T[x,y+1] = 1 + min(T[x-1,y], T[x,y], T[x+1,y])
最后,只需在表中找到最大尺寸的三角形
T
,并计算相应的三角形面积。(公式留给读者作为练习)


复杂性是
O(n²)

要求家庭作业帮助的问题必须包括到目前为止你为解决问题所做的工作的摘要,以及你在解决问题时遇到的困难的描述(,)。好的,对不起,我从来没有要求过家庭作业,所以我不知道。没关系,如果你能和我们分享你的一些想法,那就太好了。但是,由于您只要求提示,而不是完整的解决方案,我认为这很好。这是一个来自代码竞赛的问题吗?你能提供一个链接吗?我想在网上验证我的答案judge@fjardon不抱歉,这是一个密码保护的法官。一个完美的经典动态规划解决方案!也许我遗漏了什么,但一个3单元三角形不是由3个重叠的2单元三角形组成的,因为在第3层,虚线的数量应该是5,而不是9。@MichalH看我的图表,我是指3单元三角形的下封头和上面的3个2单元三角形。这也是为什么在更新公式中有
+1
。@MichalH我同意对于一个3个单位的三角形,顶行包含5个破折号。看看我的图表,我展示了如何取消重叠的三角形。3个三角形的顶行有9个项目,但重叠减少为5个不同的虚线。在我的图表中,每个重叠的三角形都使用不同的符号(“-”、“*”、“+”),以便您可以看到它们在原始三角形中是如何重叠的。