Algorithm 一种无附加条件的算术表达式
算术表达式可以有许多可能的值Algorithm 一种无附加条件的算术表达式,algorithm,computer-science,dynamic-programming,Algorithm,Computer Science,Dynamic Programming,算术表达式可以有许多可能的值 有人能帮我吗 有一个动态规划解决方案 对于表达式,可以将其“最外面的拆分点”定义为不在任何括号内的第一个运算符。现在,在这个拆分之后,如果它位于+上,那么您需要最大化左子表达式和右子表达式;如果是-,则最大化左侧,最小化右侧 您可以使用动态规划或记忆来实现此算法。记忆很简单:搜索每个分割点,并将答案保存在另一个数据结构中(两个2D矩阵,用M[x][y]字符串表示表达式的最大/最小值,从x开始,在y结束);当数据在矩阵中时,使用它而不是重新计算 使用动态规划有点棘手,
有人能帮我吗 有一个动态规划解决方案 对于表达式,可以将其“最外面的拆分点”定义为不在任何括号内的第一个运算符。现在,在这个拆分之后,如果它位于
+
上,那么您需要最大化左子表达式和右子表达式;如果是-
,则最大化左侧,最小化右侧
您可以使用动态规划或记忆来实现此算法。记忆很简单:搜索每个分割点,并将答案保存在另一个数据结构中(两个2D矩阵,用M[x][y]
字符串表示表达式的最大/最小值,从x
开始,在y
结束);当数据在矩阵中时,使用它而不是重新计算
使用动态规划有点棘手,但您可以这样想:
a?b?c
,这是通过假设分割点在a
和b
之间,假设分割点在b
和c
上计算的,并存储这两个值的最大/最小值);李>
k
-长度序列的最大/最小值后,使用与步骤2中相同的方法计算k+1
-长度序列,直到k是数组的长度,并返回长度k
的最大值这几乎与算法相同,算法具有
O(N^3)
复杂性。通过推理可以粗略地证明其复杂性:您需要执行循环N-1
次,每次最多执行N-1
子序列,并且您最多需要尝试N-1
拆分点。所以,N^3
时间复杂性。您正在寻找一种特定的语言吗?您必须构建for循环并迭代可能的组合。您需要一个变量来跟踪最高和结果。每次迭代,你都会根据跟踪变量检查答案,如果它更大,就替换它。伪代码,我相信这是通过动态编程完成的。