OJ——01堆砖块问题

    xiaoxiao2021-04-14  89

    小易有n块砖块,每一块砖块有一个高度。小易希望利用这些砖块堆砌两座相同高度的塔。为了让问题简单,砖块堆砌就是简单的高度相加,某一块砖只能使用在一座塔中一次。小易现在让能够堆砌出来的两座塔的高度尽量高,小易能否完成呢。 输入描述: 输入包括两行: 第一行为整数n(1 ≤ n ≤ 50),即一共有n块砖块 第二行为n个整数,表示每一块砖块的高度height[i] (1 ≤ height[i] ≤ 500000) 输出描述: 如果小易能堆砌出两座高度相同的塔,输出最高能拼凑的高度,如果不能则输出-1. 保证答案不大于500000。 输入例子: 3 2 3 5 输出例子: 5 实现代码如下:

    package test; import java.util.Scanner; public class bricks{ static void tower(int[] bricks, int[][] h, int n, int sum) { for (int i = 0; i < 2 * sum + 1; i++) { h[0][i] = Integer.MIN_VALUE; } h[0][sum] = 0; for (int i = 1; i <= n; i++) { int b = bricks[i - 1]; for (int j = 0; j < 2 * sum + 1; j++) { h[i][j] = h[i - 1][j]; if (j - b >= 0) { h[i][j] = Math.max(h[i][j], h[i - 1][j - b]); } if (j + b < 2 * sum + 1) { h[i][j] = Math.max(h[i][j], h[i - 1][j + b] + b); } } } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] bricks = new int[n]; int sum = 0; for (int i = 0; i < n; i++) { bricks[i] = sc.nextInt(); sum = sum + bricks[i]; } int[][] h = new int[n + 1][2 * sum + 1]; tower(bricks, h, n, sum); System.out.println(h[n][sum] > 0 ? h[n][sum] : -1); } }
    转载请注明原文地址: https://ju.6miu.com/read-670228.html

    最新回复(0)