数字序列加入+,*运算符后取得最大值问题; 动态规划;打破传统从决策入手思想;找出问题的特有性质;从例子入手找特点;

假设有一个数组A,里面的元素都大于1的正整数,只采用加号或乘号,不改变数组元素的位置,如何使最后结果最大?比如:
A={2,1,1,1,1,2}那么就用加号结果为8,B={3,1,3}那么就用乘号结果为9。

 

一开始我想从决策入手,即对每个位置逐次加上+或者*,然后利用回溯方面的思想或者动态规划来做,可是发现一旦遇到*,或者连续*,问题显得很复杂,无法实施。

 

这个题的特点就是发现特有的性质。  从+断开的地方左右是没有联系的,所以我们应该来安排+号,实现问题的分割。

我们从序列的头开始先找第一个加号,然后计算+左边的乘积,然后计算+右边的最大值。 右边也是同样的问题。

 

从各种加号的位置分布情况中找到一个最有的值。

 

 

 

 

 

思想是动态规划求解 ,

公式: result[n]=max { (x[k]*x[k+1]*x[k+2]*....x[n])+result[k-1] } ,k取1....n 

result[n]表示1...n的最大值

参考的 zyl072 的思路 ,重点理解 X*X*X + X*X*X*X + X + X*X  

我们可以从2 1 1 1 1 2的最后往前找,找到一个位置放置一个加号,从这里断开,+ 的右边的是乘积运算 ,右边的乘积+左边的最大值就是整个序列最大值。 左边最大值是同样的子问题 ,会发现有最优子结构性质,动态规划递推就可以了。

关键就是单独的一个X也符合这个公式, 例如2 1 1 1 1 2, 我们可以把加号放在任何一个空位,然后对+右边做乘,对+左边继续递归计算。 例如 2 1 1 1 1 + 2, 这种情况是只有2自己做乘法运算,+左边是同样问题 2 1 1 1 1 ,且与父问题无关 ,这时候举个例子 2 + 1 1 1 1,右边4个1相乘,然后对2递归,2只有自己相乘了就是它本身2 ,公式就变成了 2+1*1*1*1+2 。 现在去看看公式就明白最优子结构了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值