代码已经摆在下面了。
【原题】请点击这里
下面简单说一下题目内容:
给定一个长为N(6<=N<=40)的数字字符串(其实用int数组也可以),往它们中间塞入K(1<=K<=6)个乘号,
使形成的算式结果(乘积)最大。
“区间DP与其余DP有别”
所以在理解与解题是不应该以其他的DP思路为基础(不然会很凌乱)。这是一道划分型区间DP。
首先要抓住DP的共性:
求出子问题最优解,使每个子问题包含其子问题中的最优解。区间DP同一问题(相比之下)包含更多的子问题最优解,
所以可以简单理解为:枚举“区间”,也就是说,线性动规每个点可能就只有2个左右的来源,而这一题的每个子问题的最优解要牵扯到多个来源。
下面开始美妙的分析:
(1)影响每一个状态的玩意儿有:当前长度i(或者说是位置),当前已使用的h个乘号(*);
(2)通过简单的思考:如果我们想求出:在前i个数中,用h个乘号的情况下的最大乘积(即一个子问题的最优解)。那么,我们就需要,把这其中所有
的组合方式的乘积记录一遍,再在它们中找到最优解(这叫“状态更新”),记为此状态(i,h)的最优解。