刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

最大值

题目描述:

给定一个正整数M(1≤M≤5)和一个只包含数字的字符串(5<字符串长度≤20)。使用M个乘号插入到字符串中,且两个乘号不能相邻,插入后生成一个乘法算式。找出一种使乘法算式数值最大的插入方式,并将结果输出。  (乘号不能放在字符串的首尾位置)

如M=2,字符串为123456,插入2个乘号。插入方式有:

1*2*3456=6912,1*23*456=10488,1*234*56=13104,1*2345*6=14070,12*3*456=16416,12*34*56=22848,12*345*6=24840,123*4*56=27552,123*45*6=33210,1234*5*6=37020,

其中乘法算式数值最大是第十种,为37020。

输入描述:

第一行输入一个正整数M(1≤M≤5),表示乘号个数。

第二行输入一个只包含数字的字符串(5<字符串长度≤20),表示要插入M个乘号的字符串。

输出描述:

输出一个整数,表示最大乘积数值。


样例输入:

2
123456

样例输出:

37020

使用微信搜索喵呜刷题,轻松应对考试!

答案:

最大乘积数值为37020。

解析:

【喵呜刷题小喵解析】:
对于这个问题,我们可以使用动态规划来解决。首先,我们定义一个二维数组dp,其中dp[i][j]表示在字符串的前i个字符中插入j个乘号所能得到的最大乘积。

我们可以从字符串的第二个字符开始遍历,对于每个字符,我们考虑将其放在当前位置,或者将其放在当前位置之前的一个乘号后面。如果我们将字符放在当前位置,那么我们需要考虑在前面的字符中插入j-1个乘号,即dp[k][j-1],其中k
对于每个字符,我们需要找到最大的乘积,即max(dp[k][j-1]*num[i], dp[k][j]*(num[k+1]-num[i+1])),其中num[i]表示字符串的第i个字符所代表的数字。

最后,dp[n][m]即为所求的最大乘积,其中n为字符串的长度,m为乘号的个数。

对于样例输入,我们可以得到最大乘积为37020。
创作类型:
原创

本文链接:最大值 题目描述: 给定一个正整数M(1≤M≤5)和一个只包含数字的字符串(5<字符串长度≤20)。

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share