题目
设有一个长度为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[i−1][0]∗10+a[i];
其实这个公式是为了求所谓的后缀和,就是把第i个前的数来加起来,但是要乘以10,因为有可能是有两个数以上的,那就有十位个位之分,所以要乘10.
f[i][k]=max(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],f[j−1][k−1]+b[j][i]);
这个就是求最大的和了.
程序如下
#

这篇博客介绍了如何利用动态规划解决两类问题:一是找到数字字符串分段相加的最大和;二是找到数字字符串分段相乘的最大乘积。对于加法问题,博主给出了求解后缀和的公式,并解释了如何找到最大和。而对于乘法问题,博主提出了将加号改为乘号来寻找最大乘积的方法。两个问题都给出了具体的输入输出样例和解题思路。
最低0.47元/天 解锁文章
365

被折叠的 条评论
为什么被折叠?



