TimusOJ - 1146. Maximum Sum 子矩阵的最大累加和

发布于 2024-08-29 17:08:12 字数 2561 浏览 8 评论 0

题目

在这里插入图片描述

解析

首先,解这道题之前,先要知道求一维的最大子数组和 LeetCode53 和 Hdu1003

解析:假设一个 24 列的矩阵如下:

-2  3  -5  7
 1  4  -1 -3

如何求必须含有 2 行元素的子矩阵的最大累加和? 做法是将两列的元素累加,然后得到累加数组 [-1, 7, -6, 4] ,然后通过求一维数组的最大累加和的方法求出这个累加数组的最大累加和,结果是 7 。也就是说,必须含有 2 行元素的子矩阵中的最大和为 7 ,且这个子矩阵是:

3
4

也就是说: 如果一个矩阵一共有 n 行且限定必须含有 n 行元素的情况下,我们只要把矩阵中的每一列的 n 个元素累加生成一个累加数组,然后求出这个累加数组的最大累加和,这个最大累加和就是必须含有 k 行元素的子矩阵中的最大累加和。
(类似压缩的思想)

明白了上述的过程,然后就是按照上述过程求出所有的 "上下组合"的解的最大值即可。具体过程看下面:

  • 注意: 每次 cols 数组的求取,是利用上次求出的结果加上这次的,这样可以将时间复杂度从 O(N^4) 降低到 O(N^3)

在这里插入图片描述

import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {

    /** O(N^3) **/
    public static void main(String[] args){
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
        int n = cin.nextInt();
        int[][] matrix = new int[n][n];
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                matrix[i][j] = cin.nextInt();
            }
        }

        // more usual solution not just square matrix (n != m) 
        n = matrix.length;
        int m = matrix[0].length;
        int res = Integer.MIN_VALUE;
        for(int i = 0; i < n; i++){
            int[] cols = new int[m];  // cols
            for(int j = i; j < n; j++){
                for(int k = 0; k < m; k++) {
                    cols[k] = cols[k] + matrix[j][k];
                }
                int preMax = cols[0];
                int maxx = cols[0];
                for(int k = 1; k < m; k++){
                    preMax = preMax > 0 ? preMax + cols[k] : cols[k];
                    maxx = Math.max(preMax, maxx);
                }
                res = Math.max(res, maxx);
            }
        }
        System.out.println(res);
    }
}

题目链接

http://acm.timus.ru/problem.aspx?space=1&num=1146

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

望笑

暂无简介

0 文章
0 评论
21 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文