/**
* 最大子矩阵
* 穷举可解,复杂度太高
*
* 局部动态规划
* 参考最大子段和问题
*
*
*/
public class MaxMetrics {
public static int twoMax(int[][] a, int m, int n){
int max = 0;
int[] b = new int[n];
for(int i=0; i<m; i++){
clear(b);
for(int j=i; j<m; j++){
for(int k=0; k<n; k++){
b[k] += a[j][k];
int sum = oneMax(b, n);
if(sum > max){
max = sum;
}
}
}
}
return max;
}
private static int oneMax(int[] a, int n){
int sum = a[0];
int max = a[0];
for(int i=1; i<n; i++){
if(sum >0){
sum += a[i];
}else{
sum = a[i];
}
if(sum > max){
max = sum;
}
}
return max;
}
private static void clear(int[] a){
for(int i=0; i<a.length; i++){
a[i] = 0;
}
}
/**
* @param args
*/
public static void main(String[] args) {
int[] a1 = {1,-2,3,4,-5,-3,9,6};
int[] a2 = {-2,-2,5,7,2,12,-9,-6};
int[] a3 = {1,2,3,4,-5,-3,8,1};
int[] a4 = {8,6,-3,-4,5,-3,-1,-4};
int[][] a = {a1,a2,a3,a4};
int max = MaxMetrics.twoMax(a, 4, 8);
System.out.println(max);
}
}最大子矩阵
最新推荐文章于 2024-11-22 20:10:00 发布
946

被折叠的 条评论
为什么被折叠?



