Algorithm 通过插入一个括号最大化表达式的计算

Algorithm 通过插入一个括号最大化表达式的计算,algorithm,language-agnostic,Algorithm,Language Agnostic,我在一次编程竞赛中遇到了这个问题: 给定表达式x1 op x2 op x3 op。OP XN,其中OP是加法+或乘法*,而席是1到9之间的数字。目标是在表达式中只插入一组括号,以便使表达式的结果最大化。 n最大值为2500 例如: 输入: 3+5*7+8*4 输出: 303 说明: 3+5*(7+8)*4 问题中给出的另一个约束条件是,最多只能出现15'*'符号。这简化了问题。因为我们将只有17个括号插入选项,暴力将在O(17*n)中起作用 我一直在想,如果这个约束不存在,那么理论上我能用O(n

我在一次编程竞赛中遇到了这个问题:

给定表达式x1 op x2 op x3 op。OP XN,其中OP是加法+或乘法*,而席是1到9之间的数字。目标是在表达式中只插入一组括号,以便使表达式的结果最大化。
n最大值为2500

例如: 输入: 3+5*7+8*4

输出: 303

说明: 3+5*(7+8)*4

问题中给出的另一个约束条件是,最多只能出现15'*'符号。这简化了问题。因为我们将只有17个括号插入选项,暴力将在O(17*n)中起作用


我一直在想,如果这个约束不存在,那么理论上我能用O(n^2)来解决这个问题吗?在我看来,这似乎是一个DP问题。我说的是理论上的,因为答案会很大(可能是9^2500)。因此,如果我忽略处理大数字的时间复杂性,那么O(n^2)是可能的吗

如果没有乘法运算,就完成了

如果没有添加,您就完成了

必须计算的子项的前导和尾随操作始终是加法,因为乘法周围的括号不会改变结果

如果子项只包含附加项,则不需要计算它们的子项。整个子项的乘法总是更大。(因为我们只有正数/数字。)

遍历该术语一次,尝试将左括号放在每个*后面(最坏情况下),然后在该循环中第二次,尝试将右括号放在紧跟在+后面的每个*前面(最坏情况下)

你可以用O(ma/2)来解决这个问题,m:乘法数,a:加法数。这比n^2小

括号的可能位置用^表示:

1*2*^3+4+5^*6*^7+8^