public class Main { public static void main(String[] args) { int[] nums = {3, 1, 5, 8}; int n = nums.length;

    int[][] dp = new int[n][n];
    for (int i = 0; i < n; i++) {
        dp[i][i] = nums[i];
    }
    for (int i = n - 2; i >= 0; i--) {
        for (int j = i + 1; j < n; j++) {
            int max = 0;
            for (int k = i; k <= j; k++) {
                int left = 1, right = 1;
                if (i != 0) {
                    left = nums[i - 1];
                }
                if (j != n - 1) {
                    right = nums[j + 1];
                }
                int coins = left * nums[k] * right;
                if (k > i) {
                    coins += dp[i][k - 1];
                }
                if (k < j) {
                    coins += dp[k + 1][j];
                }
                max = Math.max(max, coins);
            }
            dp[i][j] = max;
        }
    }
    System.out.println(dp[0][n - 1]);
}

}

Java 算法:戳气球问题求最大硬币数量

原文地址: https://www.cveoy.top/t/topic/lixx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录