华为机试真题 Java 实现最大矩阵和

Posted MISAYAONE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试真题 Java 实现最大矩阵和相关的知识,希望对你有一定的参考价值。

目录

题目

思路

考点

Code


题目

给定一个二维整数矩阵,要在这个矩阵中选出一个子矩阵,使得这个子矩阵内所有的数字和尽量大,我们把这个子矩阵称为和最大子矩阵,子矩阵的选取原则是原矩阵中一块相互连续的矩形区域。

输入描述:

输入的第一行包含2个整数n, m(1 <= n, m <= 10),表示一个n行m列的矩阵,下面有n行,每行有m个整数,同一行中,每2个数字之间有1个空格,最后一个数字后面没有空格,所有的数字的在[-1000, 1000]之间。
输出描述:

输出一行一个数字,表示选出的和最大子矩阵内所有的数字和。
示例1   输入输出示例仅供调试,后台判题数据一般不包含示例

输入

3 4

-3 5 -1 5

2 4 -2 4

-1 3 -1 3

输出

20

说明

一个3*4的矩阵中,后面3列的子矩阵求和加起来等于20,和最大。

思路

1:从题目中来看,因为已经限制了矩阵最大就是10X10的,所以暴力破解也就成了可能,我们就直接遍历所有的子矩阵,看看谁最大就可以了。

考点

1:暴力法

Code

import java.util.Scanner;
import java.util.*;

public class Main  
    public static void main(String[] args)  
        // 处理输入
        Scanner in = new Scanner(System.in);
        int m, n;
        // 限定长度为10
        int matrix[][] = new int[10][10];
        int sum[][] = new int[10][10];

        n = in.nextInt();
        m = in.nextInt();

        for (int i = 0; i < n; i++) 
            for (int j = 0; j < m; j++) 
                matrix[i][j] = in.nextInt();
            
        

        for (int i = 0; i < n; i++) 
            for (int j = 0; j < m; j++) 
                sum[i][j] = matrix[i][j];
                if (i != 0) 
                    sum[i][j] += sum[i - 1][j];
                
                if (j != 0) 
                    sum[i][j] += sum[i][j - 1];
                
                if (i != 0 && j != 0) 
                    sum[i][j] -= sum[i - 1][j - 1];
                
            
        

        int result = matrix[0][0];
        for (int i = 0; i < n; i++) 
            for (int j = 0; j < m; j++) 
                for (int ri = i; ri < n; ri++) 
                    for (int rj = j; rj < m; rj++) 
                        int temp = sum[ri][rj];
                        if (i != 0) 
                            temp -= sum[i - 1][rj];
                        
                        if (j != 0) 
                            temp -= sum[ri][j - 1];
                        
                        if (i != 0 && j != 0) 
                            temp += sum[i - 1][j - 1];
                        
                        if (temp > result) 
                            result = temp;
                        
                    
                
            
        
        System.out.println(result);
    


以上是关于华为机试真题 Java 实现最大矩阵和的主要内容,如果未能解决你的问题,请参考以下文章

华为机试真题 C++ 实现最大矩阵和

华为机试真题 C++ 实现最大矩阵和

华为OD机试真题Java实现矩阵最大值真题+解题思路+代码(2022&2023)

华为机试真题 C++ 实现矩阵最大值

华为机试真题 Java 实现学生方阵

华为OD机试真题Java实现矩阵扩散真题+解题思路+代码(2022&2023)