給定乙個矩陣matrix,其中的值有正、有負、有0,返回子矩陣的最大累加和。
例如,matrix為:
其中最大累加和的子矩陣為:
2 2
所以返回4。
對矩陣按列求和存到陣列裡,然後再求此陣列的子陣列的最大累加和,即為矩陣的最大累加和。
以從第一行為例畫**釋:
第一行計算後,最大的累加和為2
同理可對第二行…第n行進行計算,最後得到子矩陣的最大累加和。
public class case06_maxsubmatrix ,,};
system.out.println(maxsum(matrix));
}//求子矩陣的最大累加和o(n^3)
static int maxsum(int matrix)
//累加完成
//求出sums的子陣列最大和o(n)
int t = findbydp(sums);
if (t > max)
}//另起一行作為起始行,把sum清零
arrays.fill(sums,0);//快速地將sums的每個元素都設為0
beginrow++;
}return max;
}//遞推法 o(n)求子陣列的最大累加和
static int findbydp(int arr) else
if (sumi > maxsum)
}return maxsum;}}
注 多維陣列與矩陣之子陣列的最大累加和
給定乙個陣列arr,返回子陣列的最大累加和 例 arr 1,2,3,5,2,6,1 所有子陣列中 3,5,2,6 可以累加出最大的和為12,所以返回12。注 首先解釋一下什麼是子陣列?即一段連續的陣列的切片 雙重for迴圈,計算每個子陣列的累加和,記錄其中最大的累加和。public class 05...
多維陣列與特殊矩陣的壓縮儲存
陣列是由型別相同的資料元素構成的有序集合,每個資料元素稱為乙個陣列元素,每個元素受 n 1 個線性關係的的約束,每個元素在n個線性關係中的序號i1,i2.in稱為該元素的下標,並稱該陣列為n維陣列.陣列的儲存結構與定址 由於陣列一般要求實現隨機訪問,所以一般採用順序儲存結構.由於記憶體單元是一維,而...
演算法總結之 子矩陣的最大累加和問題
給定乙個矩陣matrix,其中的值有正 負 0 返回子矩陣的最大累加和 這個是 子陣列最大累加和問題的 公升級版 看例子就懂了 如果只有兩行,那麼 上下兩行相加,得出列加陣列 得出最大累加和 總結整個過程,關鍵之處在於 用求累加陣列的最大累加和是的的方式得到每一步的最大子矩陣的累加和 每一步的累加陣...