动态编程帮助LISA-SPOJ

问题描述 投票:4回答:3

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

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

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

非常感谢。

algorithm
3个回答
5
投票

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

dp[l][r]成为子串[l,r]的最大结果

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

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

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


0
投票

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


0
投票
  1. 将有n / 2 + 1个数字 n / 2标志 为每个符号分配剩下的数字。 创建一个方形矩阵用相应的数字初始化对角线,现在i,j = max((i,k)(第k个数字的右边)(k + 1,j))i <= k (0,m-1)就是答案 注意它指向流向(0,m-1)的流,因此是DAG(有向无环图)。 Thumb规则:如果问题的任何图形表示可以针对DAG进行优化,则DP可以解决该问题

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

© www.soinside.com 2019 - 2024. All rights reserved.