本文共 540 字,大约阅读时间需要 1 分钟。
题目大意:对于n*n的矩阵,求它的最大子矩阵和。
其实就是最大子串和的扩展版本,当然首先尝试用最大子串和的变体解决这道题。
首先考虑到求矩阵的每一个子矩阵和都可以首先对行或列累加,就把二维矩阵求和转化成一维数组求和。把这一点想办法转化到求最大子串和。
可以初始化时对输入矩阵进行处理,ai表示第i行前j个数字之和。
在计算所有子矩阵的和时,用i,j控制子矩阵的左右区间,用k遍历子矩阵每一行(也就是把子矩阵同行数字相加,成一列一维数组,对这个数组用求最大子串和的方法即可求出最大值)。而调整初始矩阵是为了避免重复累加数据,节省时间。
代码:
#include#define MAX 101int main(){ int n; int a[MAX][MAX]={0}; int colsum[MAX][MAX]={0}; int maxn=0,sum; scanf("%d",&n); for(int i=0;i maxn) maxn=sum; } } printf("%d\n",maxn); return 0;}
转载地址:http://jnial.baihongyu.com/