【DP】加法最大 和 乘积最大

这篇博客介绍了如何利用动态规划解决两类问题:一是找到数字字符串分段相加的最大和;二是找到数字字符串分段相乘的最大乘积。对于加法问题,博主给出了求解后缀和的公式,并解释了如何找到最大和。而对于乘法问题,博主提出了将加号改为乘号来寻找最大乘积的方法。两个问题都给出了具体的输入输出样例和解题思路。
摘要由CSDN通过智能技术生成

题目

设有一个长度为n的数字字符串,分成k+1个部份,使其k+1部份相加的和为最大。例如:数字串’340670’,k=1,其加法有
3+40670=40673 34+0670=704 340+670=1010 3406+70=3476 34076+0=34076
其最大和为40676。
问题:当数字串和k给出后,找出一个分法使和为最大。

输入

输入n和k,n表示有多少个数字字符,k代表共要用多少个加号

输出

最大和

输出样例

6 1
340670

输出样例

40673

解题思路

f [ i ] [ 0 ] = f [ i − 1 ] [ 0 ] ∗ 10 + a [ i ] ; f[i][0]=f[i-1][0]*10+a[i]; f[i][0]=f[i1][0]10+a[i];
其实这个公式是为了求所谓的后缀和,就是把第i个前的数来加起来,但是要乘以10,因为有可能是有两个数以上的,那就有十位个位之分,所以要乘10.
f [ i ] [ k ] = m a x ( f [ i ] [ k ] , f [ j − 1 ] [ k − 1 ] + b [ j ] [ i ] ) ; f[i][k]=max(f[i][k],f[j-1][k-1]+b[j][i]); f[i][k]=max(f[i][k],

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值