动态编程帮助LISA-SPOJ

时间:2012-06-23 05:56:42

标签: algorithm

我试图解决这个问题 - http://www.spoj.pl/problems/LISA/

我最初想到了贪婪,但后来意识到它不起作用。 这似乎是一个DP问题。  我无法形成递归关系。 我无法形成递归关系。这不仅仅是这个问题,但每当遇到一个稍微困难的DP问题时我就会陷入困境。我知道这必须是常见的,练习会有所帮助。但我只是在没有找到解决方案的情况下从一个问题转移到另一个问题。

对于上述问题以及DP遇到的任何建议都会很棒。

非常感谢。

3 个答案:

答案 0 :(得分:5)

请注意,允许的操作仅为+* - 两个操作数严格增加的二进制操作(它们是正数)。

dp[l][r]成为子串[l,r]

的最大结果

以下是有关此问题的提示,这些提示也适用于每个dp。

1)什么是基础案例? (提示:非常简单,通过添加/删除括号不会改变其值)

2)你如何从更大的问题转向更小的问题? (提示:你可以尝试找到最后一次操作的地方)

答案 1 :(得分:0)

只需要一个天真的Matrix Chain Multiplication实现来解决这个问题。

答案 2 :(得分:0)

  1. 将有n / 2 + 1个数字
    1. n / 2个符号
    2. 为每个标志分配剩余的数字。
    3. 创建一个平方矩阵并用相应的数字初始化对角线,现在i,j = max((i,k)(第k个数字的正负号)(k + 1,j))i <= k
    4. (0,m-1)将回答
    5. 请注意,它会将流引向(0,m-1),因此指向DAG(有向无环图)。
    6. 经验法则:如果可以将问题的任何图形表示优化为DAG,则DP可以解决此问题

有关解决方案,请参阅: https://shashankmishracoder.wordpress.com/2019/03/29/spoj-lisa-matrix-chain-multiplication-variation/