给定一系列加法和减法的数字(例如4-3-5
),如何插入括号以找到最大值?在我的示例中,4-3-5
可以是:
(4-3)-5 = -4
或
4-(3-5) = +6
所以第二个结果是最大值。但对于像4+5-8-6-3-2
这样的事情,蛮力方法需要花费太长时间。
如何找到最大值?我认为动态编程可能对这个问题有用。
答案 0 :(得分:2)
动态编程确实是正确的。你需要的是一对功能。一个人告诉你,给定一个数字间隔,在哪里划分它以获得最大值,以及你获得的最大值。另一个做同样的事情以获得最低限度。
这两个函数都可以通过尝试每个点来划分它并查看它导致的内容来递归计算。特别是如果你正在寻找一个最大值并且除以 - ,你想要使前半部分最大而第二分钟最小。如果你正在寻找一个最大值并且除以+,你想要两个最大值。如果你正在寻找一个最小值并且除以+,那么你想要两半分钟。如果你正在寻找一个最小值并且除以 - ,你需要前半分钟和第二个最大值。
为了提高效率,请记住每个功能。现在它应该及时运行O(n^3)
。 (您必须计算每个O(n^2)
间隔,每次计算都需要查看O(n)
个可能的分割点。)