我想最大化表达式5-8+7*4-8+9
分割后,答案为200
(5 − ((8 + 7) × (4 − (8 + 9))))
。
可以使用Matrix-chain multiplication
算法解决。
如果表达式只有'+'和'*'运算符
Let's take expression 5+2*4
1 2 3
1 5 7 28
2 - 2 8
3 - - 4
这是一个3X3矩阵,其中(1,1)是5,(2,2)是2,(3,3)是4 如果我想知道M [1] [2]或M [1] [3]那么
M [1] [2] = M [1] [1] o M [2] [2]
M [1] [3] = max(M [1] [1] o M [2] [3],M [1] [2] o M [3] [3])
有人可以帮我找到' - '运算符的正确方法。
答案 0 :(得分:0)
不确定是否可以使用您的算法解决,但这是我将如何解决它。
假设你必须简化一些表达式:a # b # c # d # e
,其中#是某些操作(#可以是不同的)。我会用递归(和memoization)来处理它。在递归的第一步,我将尝试在每个可能的位置插入括号,并在此表达式后计算表达式:
(a # b) # c # d # e
= X # c # d # e
a # (b # c) # d # e
= a # Y # d # e
a # b # (c # d) # e
= a # b # Z # e
a # b # c # (d # e)
= a # b # c # V
所以你基本上只将5个运算符表达式减少为一堆4个运算符表达式。如果2表达式相同,则记忆将有所帮助。当只有一个数字时(在这种情况下,您将其与最大值和更新最大值进行比较),您可以完成递归。
请注意,对于5个运算符表达式,您甚至不需要记忆。