最大子矩阵和
来源:互联网 发布:excel2003软件官方下载 编辑:程序博客网 时间:2024/05/03 03:53
题目:
求一个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 <stdio.h>#include <stdlib.h>#include <string.h>/*从a中找到最大连续子序列的和*/int getSubMaxSum(int *a, int n){ int sum = *a; int tmp = 0; int i; for (i=0; i<n; i++) { tmp += a[i]; /*如果当前和比历史记录大,则更新*/ if (tmp > sum) { sum = tmp; } if (tmp < 0) { /*如果小于0,则从下一个重新开始计算*/ tmp = 0; } } return sum;}/*row:行长度 col:列长度 算法思想参考:http://blog.csdn.net/YCH1035235541/article/details/8260687*/int getSubMaxArray(int arr[][4], int row, int col){ int i; int j; int k; int sum = 0; int tmp = 0; int rec[255]; for (k=0; k<row; k++)/*k表示从k开始求最大子矩阵*/ { memset(rec, 0, sizeof(rec)); for (i=k; i<row; i++) { for (j=0; j<col; j++) { rec[j] += arr[i][j]; /*累加a[k][0]到a[row][col]的值到数组*/ } tmp = getSubMaxSum(rec, col); if (sum < tmp) { sum = tmp; } } } return sum;}int main(){ int a[][4] = { {0, -2, -7, 0}, {9, 2, -6, 2}, {-4, 1, -4, 1}, {-1, 8, 0, -2}, }; printf("sum %d\n", getSubMaxArray(a, 4, 4)); return 0;}
0 1
- 最大子矩阵和
- 最大子矩阵和
- 最大子矩阵和
- 最大子矩阵和
- 最大子矩阵和
- 最大子矩阵和
- 最大子矩阵和
- 最大子矩阵和
- 最大子矩阵和
- 最大矩阵子和
- 最大子矩阵和
- 最大子矩阵和
- 最大和子矩阵
- 最大和子矩阵
- 最大子矩阵和
- 最大和子矩阵
- 最大子矩阵和
- 最大子矩阵和
- android 定时任务的几种实现方式
- C++中构造函数调用构造函数
- linux 下常用的 19 条命令
- How to Build An Action and Emotion Database for Simulated Driver’s State Recognition
- 邻接矩阵创建图
- 最大子矩阵和
- win64位机安装python2.7下的numpy,scipy找不到python路径的解决办法
- 黑马程序员一java中内部类的结构分析实例
- 最大连续子数组和
- 我的第一篇博客
- Spiral Matrix II
- 寻找和为定值的两个数
- 【Android的从零单排开发日记】之入门篇(十六)——Android的动画效果
- ZOJ 1002 Fire Net(DFS啊 )