PKU1050_求最大子矩阵和值
2012-07-13 15:30
260 查看
题目链接:http://poj.org/problem?id=1050
写的有点复杂了,据说大牛们有超高效的算法,麻烦知道的朋友贴一下啊!!!!
写的有点复杂了,据说大牛们有超高效的算法,麻烦知道的朋友贴一下啊!!!!
/* * 求最大子矩阵和值问题 * 思路:要转换为一位数组最大和值问题 * 1、首先假设最大子矩阵为从第i行到第j行,第k列到第xxx) * 2、分别求子矩阵的和值保存在数组中 * 3、比较得最大子矩阵和值 * */ import java.util.Scanner; public class PKU1050 { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int n; int[][] arr; while (sc.hasNext()) { n = sc.nextInt(); arr = new int ; // 接收输入,初始化二维数组 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { arr[i][j] = sc.nextInt(); } } System.out.println(maxSubMatrixSum(arr, n)); } } // 假设从第i行到第 j行的第k列到第xxx列的值的和是最大矩阵和 private static int maxSubMatrixSum(int[][] arr, int n) { int[] a; int[] result; int i, j, k, m, max = Integer.MIN_VALUE; for (i = 0; i < n; i++) {// 开始行 for (j = i; j < n; j++) {//结束行 a = new int[100]; result = new int[101]; for (k = 0; k < n; k++) {// 第k列 for (m = i; m <= j; m++) {// 从第i行到第m行的第k列的和值 a[k] += arr[m][k]; } //得到从第i行到第m行的第k列的和值的最大值保存在result中 if (result[k] >= 0) result[k + 1] = result[k] + a[k]; else result[k + 1] = a[k]; } //得到从第i行到第m行的和值的最大值保存在max中 for (int x = 0; x < k; x++) { if (max < result[x]) max = result[x]; } } } return max; } }
相关文章推荐
- pku1050----To the Max(求矩阵的最大子段和)
- POJ 1050 To the Max(最大字矩阵)【模板】
- poj 1050 求矩阵的子矩阵的元素和最大
- poj 1050动态规划+最大子矩阵和+二维化为一维来求最大子串和值
- 【原】 POJ 1050 To the Max 求二维矩阵的最大子矩阵 解题报告
- PKU-1050 To the Max (最大子矩阵和)
- poj 1050 求矩阵最大的子矩阵和 DP
- pku 1050 二维矩阵的最大子矩阵
- poj 1050 nyoj104 矩阵最大和
- 最大子矩阵和问题 DP poj 1050
- Poj 1050 To the Max (最大子矩阵 DP)
- 动态规划(DP)——HDU1081、PKU1050 To The Max 最大子矩阵问题
- poj 1050 To the Max(最大子矩阵之和,基础DP题)
- PKU 1050 动态规划-解决最大子矩阵问题
- poj 1050 To the Max 二维矩阵转换一维求子序列最大值
- poj1050 二维数组最大子序列矩阵和
- POJ-1050 动态规划 子矩阵最大值,二位转一维处理
- 软工随堂练 找出和值最大的子矩阵 尹亚男 赵静娜
- POJ 1050 To the Max【最大子矩阵】
- 最大子矩阵问题 PKU 1050