您的位置:首页 > 其它

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: