`
viking.liu
  • 浏览: 53640 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

最大子矩阵的和

阅读更多

package www.viking.com.algorithm;

public class MaxSubMatrixSum {

	/**
	 * @param args
	 * 
	 * 求子矩阵的最大和
	 *   | a11 …… a1i ……a1j ……a1n |
  	 *	 | a21 …… a2i ……a2j ……a2n |
     *   |  .   .  .  .  .  .  .  |
     *   |  .   .  .  .  .  .  .  |
     *   | ar1 …… ari ……arj ……arn |
     *   |  .   .  .  .  .  .  .  |
     *   |  .   .  .  .  .  .  .  |
     *   | ak1 …… aki ……akj ……akn |
     *   |  .   .  .  .  .  .  .  |
     *   | an1 …… ani ……anj ……ann |
     *   
     *   基本思路:
     *   
     *   假如我们知道从第i行到第j行为最大字段,那么我们把每列相加就和得到一个一维数组,
     *   就可以利用最大字段和的方法求解了。
     *   
     *   
     *   
     *   
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        int[][]a={
        		{-1,3,-3,4,2},
        		{2,5,-1,8,7},
        		{-2,3,-3,2,2},
        		{7,4,-2,8,3},
        		{2,5,-7,9,1}
        };
      System.out.println(maxSubMatrixSum(a));
	}

	private static int n = 5;

	public static int maxSubMatrixSum(int[][] a) {
		int maxsum = a[0][0];
		int[] b = new int[n];
		for (int i = 0; i < n; i++) {
			for (int k = 0; k < n; k++) {
				b[k] = 0;
			}
			for (int j = i; j < n; j++) {
				//b[k]记录了从i到j-1的和,累加 i到j行列的和
				for (int k = 0; k < n; k++) {
					b[k] += a[j][k];
				}
				int sum = maxSubQuenceSum(b);
				if (sum > maxsum) {
					maxsum = sum;
				}
			}
		}
		return maxsum;
	}

	public static int maxSubQuenceSum(int[] b) {
		int maxsum = b[0];
		int sum = 0;
		for (int i = 0; i < b.length; i++) {
			if (sum > 0) {
				sum += b[i];
			} else {
				sum = b[i];
			}
			if (sum > maxsum) {
				maxsum = sum;
			}
		}
		return maxsum;
	}
}

0
0
分享到:
评论

相关推荐

    最大子矩阵和问题.pdf最大子矩阵和问题.pdf

    ### 最大子矩阵和问题详解 #### 一、问题背景与定义 在计算机科学与算法设计领域中,最大子矩阵和问题是寻找一个给定矩阵中具有最大和的子矩阵的问题。这类问题通常出现在数据挖掘、图像处理以及机器学习等领域,...

    C++实现的最大子矩阵和

    在计算机科学中,最大子矩阵和问题是一个经典的算法问题,主要涉及到数组处理和动态规划。在二维数组(矩阵)中,我们需要找出一个矩形子矩阵,使得其所有元素之和最大。这个问题在处理大规模数据、图像处理以及金融...

    游泳圈的最大子矩阵和

    ### 游泳圈的最大子矩阵和 #### 问题描述 在一个二维数组中,其边界条件类似于游泳圈(即数组的边缘相连),如何找到该数组中的最大子矩阵和?这里的最大子矩阵指的是所有可能的子矩阵中元素之和最大的一个。 ####...

    11080游泳圈的最大子矩阵和

    在给定的问题“11080 游泳圈的最大子矩阵和”中,我们需要解决的是在一个特定结构的二维数组中找到具有最大和的子矩阵。这个问题与经典的二维数组最大子矩阵和问题(例如, Kadane's algorithm 解决的问题)有所不同...

    最大子矩阵和

    在计算机科学领域,最大子矩阵和问题是一个经典的算法问题,主要涉及到数组处理和动态规划技术。本问题的目标是找到一个二维矩阵中的连续子矩阵,使得该子矩阵的所有元素之和最大。这个问题在实际应用中有着广泛的...

    最大子矩阵和.docx

    ### 最大子矩阵和知识点详解 #### 一、问题背景及定义 在计算机科学与算法领域,最大子矩阵和问题是一类重要的优化问题。给定一个`M×N`的矩阵,目标是找到该矩阵中的一个子矩阵,使得该子矩阵内所有元素之和最大...

    最大子矩阵和问题.doc

    ### 最大子矩阵和问题详解 #### 一、问题背景及定义 在计算机科学与算法领域,最大子矩阵和问题是一类重要的优化问题。给定一个整数矩阵 \(A\),其中 \(A\) 为 \(m \times n\) 的大小(\(m\) 行 \(n\) 列),目标...

    多行最大子矩阵和问题

    问题:给定N×N矩阵,矩阵元素都是-127到+127之间的整数。请找到一个子矩阵,使得其元素之和最大。 输入: 第一行整数 N (N)。接下来N行元素,每行N个元素,每个元素介于-127到127之间。

    C++最大子矩阵和暴力题解

    《C++实现最大子矩阵和的暴力算法解析》 在计算机科学中,处理二维数组,尤其是矩阵的问题常常出现在算法竞赛和实际应用中。本篇文章将深入探讨如何使用C++编程语言,通过暴力搜索方法解决“最大子矩阵和”的问题。...

    华为OD题分糖果猴子吃桃服务器广播和最大的子矩阵gpu耗时最大子矩阵和最大的字串计算字符串数量正方体翻面计算最短步长py3.9

    华为OD题分糖果猴子吃桃服务器广播和最大的子矩阵gpu耗时最大子矩阵和最大的字串计算字符串数量正方体翻面计算最短步长py3.9

    最大子矩阵.zip最大子矩阵.zip

    通过迭代更新dp数组,我们可以计算出每个位置的最大子矩阵和,并在最后找出整个矩阵中的最大值。 此外,对于寻找最大乘积子矩阵的问题,可以使用“最大矩形”算法,如基于栈的“找最大矩形”算法。这种方法通常用于...

    最大子矩阵-使用C++实现的最大子矩阵求和.zip

    // 更新最大子矩阵和 max_sum = max(max_sum, current_sum); // 如果当前和小于0,重置当前子矩阵和 if (current_sum ) current_sum = 0; } } return max_sum; } ``` 在这个代码中,我们首先获取矩阵的行数...

    最大子段和最大子矩阵 最大子长方体

    本文主要讲述了动态规划(DP)在解决最大子段和、最大子矩阵和最大子长方体问题中的应用。这些问题都是DP模型的变形,通过适当的转化和预处理,可以将高维问题转化为一维的基本问题,然后使用DP模型求解。 1. 基础...

    单行最大子矩阵和问题

    问题:给定1×N的单行矩阵,矩阵每个元素都是-127到+127之间的整数。请找到一个连续子矩阵,使得其元素之和最大。 输入:整数 N (N),及N个元素。

    最大子矩阵和的N6、N4、N3次算法

    Given an NN integer matrix (aij)NN , find the maximum value of a 1  i  m  N and 1  j  n  N . For convenience, the maximum submatrix sum is 0 if all the integers are negative. ...

    MaxSum.rar_最大子矩阵

    3. 找到最大子矩阵和:在完成 dp 数组的填充后,最大子矩阵的和将存储在 dp 数组的最后一行最后一个元素,即 dp[m-1][n-1],其中 m 和 n 分别是矩阵的行数和列数。 4. 计算最大子矩阵的边界:为了找到最大子矩阵的...

    最大子矩阵动态规划详解.zip

    在计算dp[i][j]时,我们需要考虑两个子问题:不包含当前元素的最大子矩阵和(dp[i-1][j]或dp[i][j-1]),以及包含当前元素的最大子矩阵和。 以下是动态规划解法的具体步骤: 1. 初始化dp数组,通常将第一行和第一列...

    求一矩阵中子矩阵的最大和

    标题中的“求一矩阵中子矩阵的最大和”是一个经典的计算机科学问题,通常称为“找到一个矩阵中的最大子矩阵和”。这个问题在数据结构和算法领域有着广泛的应用,特别是在处理大规模数据时寻找局部最优解的问题上。 ...

Global site tag (gtag.js) - Google Analytics