编程之美2.15子数组之和的最大值(二维)
来源:互联网 发布:java字符串换行连接 编辑:程序博客网 时间:2024/05/22 02:24
问题描述:求二维数组(矩阵)的子矩阵之和的最大值。
import java.util.Scanner;public class BeautyPro215 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int m = scanner.nextInt(); int n = scanner.nextInt(); int[][] a = new int[m+1][n+1]; for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { a[i][j] = scanner.nextInt(); } } System.out.println(maxSubTwoArray(m, n, a)); } } // 暴力枚舉法 /*public static int maxSubTwoArray(int m, int n, int[][] a) { int maxSum = Integer.MIN_VALUE; for (int minX = 0; minX < m; minX++) { for (int maxX = minX; maxX < m; maxX++) { for (int minY = 0; minY < n; minY++) { for (int maxY = minY; maxY < n; maxY++) { int tempSum = sumOfRegion(a, minX, minY, maxX, maxY); if (tempSum > maxSum) { maxSum = tempSum; } } } } } return maxSum; }*/ public static int maxSubTwoArray(int m, int n, int[][] a) { int maxSum = Integer.MIN_VALUE; int[][] partSum = sumOfSec(m, n, a); for (int minX = 1; minX <= m; minX++) { for (int maxX = minX; maxX <= m; maxX++) { for (int minY = 1; minY <= n; minY++) { for (int maxY = minY; maxY <= n; maxY++) { int tempSum = sumOfRegion(partSum, minX, minY, maxX, maxY); if (tempSum > maxSum) { maxSum = tempSum; } } } } } return maxSum; } //部分和 public static int[][] sumOfSec(int m, int n, int[][] a) { int[][] partSum = new int[m+1][n+1]; for(int i=0;i<=m;i++){ partSum[i][0] = 0; } for(int i=0;i<=n;i++){ partSum[0][i] = 0; } for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ partSum[i][j] = partSum[i-1][j] + partSum[i][j-1] - partSum[i-1][j-1] + a[i][j]; } } return partSum; } //区域和 public static int sumOfRegion(int[][] partSum, int minX, int minY, int maxX, int maxY) { return partSum[maxX][maxY] - partSum[minX-1][maxY]- partSum[maxX][minY-1] + partSum[minX-1][maxY-1]; }}
0 0
- 编程之美---子数组之和的最大值(二维)
- 编程之美 子数组之和的最大值(二维)
- 读书笔记之编程之美 - 2.15 子数组之和的最大值(二维)
- 编程之美2.15 子数组之和的最大值(二维)
- 编程之美读书笔记2.15 - 子数组之和的最大值(二维)
- 编程之美2.15子数组之和的最大值(二维)
- 编程之美-2.15 子数组之和的最大值(二维)
- 编程之美:第二章 数字之魅 2.15子数组之和的最大值(二维)
- 编程之美2.15——二维子数组之和的最大值
- 编程之美2.15——二维子数组之和的最大值
- 编程之美2.15子数组之和的最大值(二维)Java版
- 编程之美——子数组之和的最大值(二维)
- [编程之美] PSet2.15 子数组之和的最大值(二维)
- 编程之美-子数组之和的最大值(二维)方法整理
- 编程之美--求子数组之和的最大值
- 编程之美2.14求子数组之和的最大值
- 编程之美子数组之和的最大值
- [编程之美2.14]求子数组之和的最大值
- springmvc与swagger的集成
- rz命令与sx等命令——串口终端下载文件到目标板
- MAC安装配置tomcat
- [从头学数学] 第283节 [计算几何] 多边形的单调块划分
- 车道线检测霍夫直线检测原理分析
- 编程之美2.15子数组之和的最大值(二维)
- 数据结构学习(一):入门
- Salesforce通过Apex获取API名 Comparable排序
- 关于3.5以上版本FBX模型文件导入unity后不播放动作的问题
- 华为oj之等差数列前n项和
- spring-boot freemarker 数字格式不用逗号隔开配置
- 不懂技术不要对懂技术的人说这很容易实现
- Dialog的Window的创建过程
- 无线局域网安全(一)———WEP加密