洛谷P018 乘积最大 2000年NOIP提高组第二题真题

洛谷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;
    }
}

你可能感兴趣的:(题解,算法,洛谷)