编程之美 子数组之和的最大值(二维)
2013-03-02 19:07
148 查看
#include <iostream> using namespace std; int PS[4][5]; void calculateBound(int B[3][4], int N, int M) { int i, j; for (i = 0; i <= N; i++) { PS[i][0] = 0; } for (j = 0; j <= M; j++) { PS[0][j] = 0; } for (i = 1; i <= N; i++) { for (j = 1; j <= M; j++) { PS[i][j] = PS[i-1][j] + PS[i][j-1] - PS[i-1][j-1] + B[i-1][j-1]; } } } int BC(int a, int c, int m) { return (PS[c][m]-PS[a-1][m]-PS[c][m-1]+PS[a-1][m-1]); } int maxSum(int B[3][4], int N, int M) { int arrayMaxSum = INT_MIN; int i, j, k; int arrayStart, arrayAll; for (i = 1; i <= N; i++) { for (j = i; j <= N; j++) { arrayStart = BC(i, j, M); arrayAll = BC(i, j, M); for (k = M-1; k >= 1; k--) { if (arrayStart < 0) { arrayStart = 0; } arrayStart += BC(i, j, k); if (arrayStart > arrayAll) { arrayAll = arrayStart; } } if (arrayAll > arrayMaxSum) { arrayMaxSum = arrayAll; } } } return arrayMaxSum; } int main() { int N = 3; int M = 4; int A[3][4] = {1, 2, 3, 4, -4, 5, 6, 7, 0, 11, 23, 45}; calculateBound(A, 3, 4); cout<<maxSum(A, N, M); }
相关文章推荐
- [编程之美] PSet2.15 子数组之和的最大值(二维)
- 【编程之美】2.15 子数组之和的最大值(二维)
- 编程之美---子数组之和的最大值(二维)
- 编程之美-子数组之和的最大值(二维)方法整理
- 读书笔记之编程之美 - 2.15 子数组之和的最大值(二维)
- 编程之美-2.15-子数组之和的最大值(二维)
- 返回一个首尾相接的二维整数数组中最大子数组的和
- LeetCode Maximum Subarray和编程之美 求数组的子数组之和的最大值
- 编程之美--求子数组之和的最大值
- 输出二维数组中最大的值
- 读程序员编程艺术第七章---求最大子数组和
- 二维数组求构成矩形的和的最大值
- 结对开发(求二维首尾相接数组的最大子数组和)
- 连续子数组最大和问题编程实现
- 返回一个二维整数数组中最大子数组的和
- 【编程题目】一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值★★ (自己没有做出来!!)
- 返回一个二维整数数组中最大子数组的和
- 【160406 20:00】二维矩阵中的最大联通子数组和
- 求连续子数组的最大和 庞果在线编程
- 每日一题(81) - 子数组之和的最大值(二维) - 最大子矩阵和