洛谷P018 乘积最大 2000年NOIP真题
解题思路:
用dfs搜一下就好了,然而需要注意的是,本题的数值已经超过了64位整数的存储范围了,所以应该用大数类型来存储结果。所以我选择用Java做这道题,嘿嘿,BigInteger用起来最合适不过了
AC代码(Java版):
package luogu;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int k = cin.nextInt();
String s = cin.next();
System.out.println(dfs(s, k));
}
private static BigInteger dfs(String s, int k) {
if (k == 0) {
return new BigInteger(s);
}
if (k == s.length() - 1) {
BigInteger ret = BigInteger.ONE;
for (int i = 0; i < s.length(); i++) {
ret = ret.multiply(new BigInteger(s.substring(i, i + 1)));
}
return ret;
}
BigInteger max = BigInteger.ONE;
for (int i = 1; i < s.length() - k; i++) {
BigInteger
ret = new BigInteger(s.substring(0, i)).multiply(dfs(s.substring(i, s.length()), k - 1));
if (max.compareTo(ret) < 0) {
max = ret;
}
}
return max;
}
}