import java.math.BigInteger;
import java.util.Scanner;
public class Main {
private static Scanner cin;
private static char[] values;
private static BigInteger max = new BigInteger("1");
private static int n;
private static int k;
public static void main(String args[]) throws Exception {
cin = new Scanner(System.in);
n = cin.nextInt();
k = cin.nextInt();
String nvalue = cin.next();
values = nvalue.toCharArray();
calc(0,n-k,max,1);
System.out.println(max);
}
/**
* 基于values数组,从startposition位置开始,有length个数字可以用来分割拼接成数字,当前处理到k+1个数字的第count个,tmpValue是之前count-1个数字的乘积
* @param startPosition
* @param length
* @param tmpValue
* @param count
*/
public static void calc(int startPosition, int length, BigInteger tmpValue, int count) {
String tmp = null;
//如果是最后一个数,使用剩余的数字组成一个数字
if(count == k+1) {
tmp =String.valueOf(values,startPosition,values.length-startPosition);
BigInteger value = new BigInteger(tmp);
BigInteger tValue = tmpValue.multiply(value);
if(tValue.compareTo(max)>0) {
max = tValue;
}
}else {
for(int j=1;j<=length;j++) {
tmp = String.valueOf(values,startPosition,j);
BigInteger value = new BigInteger(tmp);
BigInteger tValue = tmpValue.multiply(value);
calc(startPosition+j,n-startPosition-j-(k-count),tValue,count+1);
}
}
}
}
java实现 洛谷 P1018 乘积最大
原创
©著作权归作者所有:来自51CTO博客作者热爱学习的发呆哥的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
洛谷P1018 乘积最大(dp)
P1018 乘积最大题解:dp[i][j]dp[i][j]dp[i][j]表示前iii个数插入jjj个乘号时的最大乘积。那么明显有
dp 洛谷 java 最大乘积 乘积最大 -
洛谷 P1018 乘积最大(区间DP)
题目大意:有一串数字,我们要求出怎么在里面插入乘号,可以使得总乘积最大。解题
乘积最大 python 最大乘积 -
【动态规划】P1018 线性dp:乘积最大
线性dp
高精度计算 动态规划 C++编程 数组处理 数学算法 -
洛谷P1018乘积最大——区间DP
题目:https://www.luogu.org/problemnew/show/P1018 区间DP+高精,注意初始化和转移的细节。 代码如下:
动态规划 i++ #include 初始化 区间dp -
[NOIP2000] 提高组 洛谷P1018 乘积最大
动态规划 线性DP
#include 输入输出 最大乘积 动态规划 i++ -
java获取所有正在运行的对象
1.class文件从类加载过程到卸载的5个阶段: 加载 ➡ 链接(验证、准备、解析) ➡ 初始化(使用前准备) ➡ 使用 ➡ 卸载(1):加载首先根据类的全类名获取定义此类的二进制字节流。并将字节流所
java获取所有正在运行的对象 java jvm 字节码 JVM