给定一个非负整数,用k个乘号将其分割,使得乘积最大。
例如:在整数12345中插入两个乘号,有以下插入法: 1*2*345 1*23*45 1*234*5 12*3*45 12*34*5 123*4*5
其中最大值是123*4*5 = 2460
一行两个非负整数,非负整数s(0 <= s <= 10^10)和乘号的个数k(0 <= k < s的位数)
一行一个整数,即乘积的最大值
12345 2
设f(i,k)表示在前i位数中插入k个乘号所得乘积的最大值 (i>k)
a(i,j)表示从第i个数字到第j个数字所组成的整数值
状态转移方程 f(i,k)=max{f(j,k-1)*a(j+1, i)}, (k<=j<i)
#include<iostream>
#include<cstring>
using namespace std;
string s;
int k;
int a(int i, int j)
int ans = 0;
for (int m = i; m <= j; ++m) {
ans = ans * 10 + s[m] - '0';
return ans;
int f(int i, int k)
if (k == 0) {
return a(0, i-1);
int MAX = 1;
for (int j = k; j <= i; ++j) {
if (f(j, k - 1) * a(j, i - 1) > MAX) {
MAX = f(j, k - 1) * a(j, i - 1);
return MAX;
int main()
cin >> s >> k;
int l = s.size();
cout << f(l, k);
return 0;
题目描述给定一个非负整数,用k个乘号将其分割,使得乘积最大。例如:在整数12345中插入两个乘号,有以下插入法:1*2*345 1*23*45 1*234*512*3*45 12*34*5123*4*5其中最大值是123*4*5 = 2460关于输入一行两个非负整数,非负整数s(0 <= s <= 10^10)和乘号的个数k(0 <= k < s的位数)关于输出一行一个整数,即乘积的最大值例子输入12345 2例子输...
今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:
设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
同时,为了帮助选手...
题目描述:设有一个长度N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
例子:有一个数字串: 312,当N=3,K=1时会有以下两种分法:
1)3* 12=36
2)31 * 2=62
这时,符合题目要求的结果是: 31*2=62
现在,请你设计一个程序,求得正确的答案。
状态转移方程:dp[i][j]=max(dp[k][j-1]*d...
在数字串“3215125”中插入3个乘号,使总的乘积最大,不可以在头和尾放乘号,也不可在任两个相邻数间放多于一个乘号。
例如第一种插入乘号的方案:32*15*12*5 = 28800
第二种插入乘号的方案:3*215*12*5 = 38700
请输出最大的乘积。
输出最大的乘积
今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:
设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
同时,为了帮助选手...
问题描述:
给出 NNN 个 111 - 999 的数字 (v1,v2,…,vN)(v1,v2,…,vN)(v1,v2,…,vN),不改变它们的相对位置,在中间加入 KKK 个乘号和 N−K−1N-K-1N−K−1 个加号,括号随便加,使最终结果最大。因为乘号和加号一共就是 N−1N-1N−1 个,所以恰好每两个相邻数字之间都有一个符号。
例如: N=5N=5N=5, K=2K=2K=2,555 个数字分别为 111、222、333、444、555,可以进行如下运算:
1∗2∗(3+4+5)=241*2*(
给出N个1-9的数字 (v1,v2,…,vN), 不改变它们的相对位置, 在中间加入K个乘号和N-K-1个加号, 括号随便加,
使最终结果最大。因为乘号和加号一共就是N-1个,所以恰好每两个相邻数字之间都有一个符号。
例如: N=5, K=2,5个数字分别为1、2、3、4、5,可以进行如下运算:
1*2*(3+4+5)=24
1*(2+3)*(4+5)=45
(1*2+3)*(4+5)=45
Input
第一行输入M(M<=10)表示有M组数据。每
今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:
设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
同时,为了帮助选手...