【华为OD】C卷真题100分:最大矩阵和 Java代码实现[思路+代码]

这篇具有很好参考价值的文章主要介绍了【华为OD】C卷真题100分:最大矩阵和 Java代码实现[思路+代码]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 C++、python、C、JS代码:

【华为OD】C卷真题100分:最大矩阵和 C/C++代码实现[思路+代码]-CSDN博客

【华为OD】C卷真题100分:最大矩阵和 python代码实现[思路+代码]-CSDN博客

【华为OD】C卷真题100分:最大矩阵和 C语言代码实现[思路+代码]-CSDN博客 

【华为OD】C卷真题100分:最大矩阵和 JavaScript代码实现[思路+代码]-CSDN博客 

 题目描述:

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

输入描述:

输入的第一行包含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,和最大。

     879                                                         
                                                            
              +---+                                                          
  3            |   |       ++                               +       +---|   
  |           |   | 3      +                6               +  |   +   |        +
  |      +     |   |       +         +                      +    |  +   |       +
  |      +    |   +---+    +        +        +++++          +   +  +   |        +
  |      +    | +      |   +   +----+        |   |          +   +  +   |        +
  |      +  3 | +      |   +   +    +      2 |   |     2    +   +  +   |        +
  |      +    | +      |   +   +    +        |   |          +   +  +   |        +
  |      +---+ +     |    |  |    +    ----+   |   +---+    |  |  +   |         +
  |      |     +     |    |  |    +    |       |   |   |    |  |  +   |         +
  |    1 |     +     | 8  |  |    +  1 |   |    | 1 |   | 1 |   |  +   |        +
  |      |     +     |    |  |    +    |   |    |   |   |   |   |  +   |        +
  |  +---+     +     +---+   |    ++---+    ++   +---+   +---+   |  +   |        +
  |  |         +         |   |    |         ++              |   |  |+   |        +
  |0 |         +         | 0 |  0 |         ++              | 0 |  |+   |        +
  |  |         +         |   |    |         ++              |   |  |+   |        +
  +---+         +          +-------+                       +---+| +|+   |        +
                +                                                    +   |        +
    0   1   2   3   4   5   6   7   8   9  10  11  12 + v:    w  u m    u 1 0 2 4
 

题目解析:

        使用循环来处理即可

代码实现:

import java.util.Scanner;

public class Main {

    public static int calc(int[][] nums, int m, int n) {
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums[0].length; j++) {
                for (int k = i; k < nums.length; k++) {
                    for (int l = j; l < nums[0].length; l++) {
                        int temp = 0;
                        for (int p = i; p < k + 1; p++) {
                            for (int q = j; q < l + 1; q++) {
                                temp += nums[p][q];
                            }
                        }
                        sum = temp > sum ? temp : sum;
                    }
                }
            }
        }
        return sum;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        int arrs[][] = new int[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                arrs[i][j] = sc.nextInt();
            }

        }

        System.out.println(calc(arrs, m, n));
    }
}

机考编程题,杂谈,算法,数据结构,华为od,java,c语言,javascript,python文章来源地址https://www.toymoban.com/news/detail-854130.html

到了这里,关于【华为OD】C卷真题100分:最大矩阵和 Java代码实现[思路+代码]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包