算法设计与分析: 3-13 最大长方体问题

3-13 最大长方体问题


问题描述

一个长,宽,高分别为 m,n,p 的长方体被分割成个 m*n*p 个小立方体。每个小立方体 内有一个整数。试设计一个算法,计算出所给长方体的最大子长方体。子长方体的大小由它 所含所有整数之和确定。

对于给定的长,宽,高分别为 m,n,p 的长方体,编程计算最大子长方体的大小。

数据输入:
第 1 行是 3 个正整数 m,n,p,1<= m,n,p<=50。接下 来 m*n 行每行 p 个正整数,表示小立方体中的数。


Java

import java.util.Scanner;

public class ZuiDaChangFangTi {

    private static int m, n, p;
    private static int[][][] a;
    private static int[][] b;

    public static void main(String[] args) {
        int max, sum;

        Scanner input = new Scanner(System.in);

        while (true) {
            //还原初始值
            sum = 0;

            m = input.nextInt();
            n = input.nextInt();
            p = input.nextInt();

            a = new int[m][n][p];
            b = new int[n][p];
            for (int i = 0; i < m; i++)
                for (int j = 0; j < n; j++)
                    for (int k = 0; k < p; k++)
                        a[i][j][k] = input.nextInt();

            for (int i = 0; i < m; i++) {
                for (int k = 0; k < n; k++)
                    for (int t = 0; t < p; t++)
                        b[k][t] = 0;
                for (int j = i; j < m; j++) {
                    for (int k = 0; k < n; k++)
                        for (int t = 0; t < p; t++)
                            b[k][t] += a[j][k][t];
                    max = maxSum2(b);
                    if (max > sum)
                        sum = max;
                }

            }

            System.out.println(sum);
        }
    }

    private static int maxSum2(int[][] a){
        int sum = 0;
        int[] b = new int[p];

        for(int i=0; ifor(int k=0; k0;
            for(int j=i; jfor(int k=0; kint max = maxSum(b);
                if(max > sum)
                    sum = max;
            }
        }

        return sum;
    }

    private static int maxSum(int[] a){
        int sum = 0, b = 0;
        for(int i=0; iif(b > 0)
                b += a[i];
            else
                b = a[i];
            if(b > sum)
                sum = b;
        }

        return sum;
    }
}

Input & Output

3 3 3
0 -1 2
1 2 2
1 1 -2
-2 -1 -1
-3 3 -2
-2 -3 1
-2 3 3
0 1 3
2 1 -3
14

Reference

王晓东《计算机算法设计与分析》(第3版)P93

你可能感兴趣的:(Algorithm,Java,动态规划,计算机算法设计与分析,计算机算法设计与分析)