乘积最大【题解】

本文介绍了一种使用区间DP解决在给定数字字符串中插入乘号以获得最大乘积的问题。通过分析题目,理解DP的共性和区间DP的特点,详细解释了如何枚举区间和状态更新来找到最优解。文中还提供了关键的C++代码实现,并解释了代码逻辑,以及预处理和DP核心程序的工作原理。
摘要由CSDN通过智能技术生成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值