求一个M*N的矩阵的最大子矩阵和。
2013-07-01 10:03
232 查看
/* copyright@nciaebupt 转载请注明出处 题目:求一个M*N的矩阵的最大子矩阵和。 比如在如下这个矩阵中: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 拥有最大和的子矩阵为: 9 2 -4 1 -1 8 其和为15。 */ #include <cstdlib> #include <iostream> int maxSubArray(int * array, int len){ if(array == NULL || len < 1) return -1; int max = -10000; int b = 0; for(int i = 0; i < len; ++i){ if(b > 0){ b += array[i]; } else{ b = array[i]; } if(b > max) max = b; } return max; } int maxSubMatrix(int matrix[][4], int rowlen, int collen){ if(matrix == NULL || rowlen < 1 || collen < 1) return -1; int max = -10000; int array[collen]; for(int i = 0; i < rowlen; ++i){ for(int j = 0; j < collen; ++j){//init array to 0 array[j] = 0; } for(int j = i; j < rowlen; ++j){//from row i to row j for(int k = 0; k < collen; ++k){ array[k] += matrix[j][k]; } int maxarray = maxSubArray(array, collen); if(maxarray > max) max = maxarray; } } return max; } int main(int argc, char ** argv){ int matrix[][4] = {{0,-2,-7,0},{9,2,-6,2},{-4,1,-4,1},{-1,8,0,-2 }}; int collen = sizeof(matrix)/sizeof(matrix[0]); int rowlen = sizeof(matrix)/(sizeof(collen)*sizeof(int)); //std::cout<<"rowlen : "<<rowlen<<"collen : "<<collen<<std::endl; int max = maxSubMatrix(matrix, rowlen, collen); std::cout<<"max : "<<max<<std::endl; system("pause"); return 0; }
相关文章推荐
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵最大子矩阵的算法模板
- 计算一个矩阵从左上角到右下角和最大(DFS)
- 求一个上三角矩阵中每一条斜线中的最大元素(L)和最小元素(S)。
- 每天学习一算法系列(32)(求一个矩阵中最大的二维矩阵(元素和最大))
- 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)
- matlab中求一个矩阵的最大值及其所在位置
- 每日一练——求一个只包含0、1的矩阵中只包含1的最大子矩阵大小
- 求一个矩阵中最大的二元矩阵
- 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)
- MATLAB sort函数应用——求一个矩阵前L个最大值及其在矩阵中的位置
- 求一个矩阵中最大的二维矩阵(元素和最大).
- 华为机考 给你一个N*M的矩阵,每个位置的值是0或1,求一个面积最大的子矩阵,这个矩阵必须是一个正方形,且里面只能由1构成,输出最大的正方形边长。其中n,m<=400;
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 一个矩阵中最大的二维矩阵(元素和最大)
- 求一个n*m阶矩阵中为1的矩阵最大面积
- 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。
- 算法习题35:求一个矩阵中最大的二维矩阵
- 04_N阶楼梯上楼问题、输入一个ip地址串,判断是否合法、输入一个四行五列的矩阵,找出每列最大的两个数