矩阵(二维数组)子矩阵最大和

本文介绍了一种求解二维矩阵中子矩阵最大和的方法,采用优化算法实现,时间复杂度为O(N^3)。该算法通过遍历矩阵的所有可能组合来找到具有最大和的子矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<vector>
#include<limits.h>
#include<algorithm>
using namespace std;
//优化解法,O(N^3)

int maxSum(vector< vector<int> > &arr){
	if (arr.empty()){
		return 0;
	}

	int MAX = INT_MIN;  //记录全局最大值
	int cur = 0;
	for (int i = 0; i < arr.size(); i++){//二维数组名表示行向量
		
		vector<int> s(arr[0].size()); 
		//二维数组列向量的大小,每次都需要重新申请,否则会造成全局变量无法更新,
		//决策失败
		for (int j = i; j < arr.size(); j++){
			//[i.....j]列的范围
			cur = 0;
			for (int k = 0; k < s.size(); k++){   
			//有几行进行决策

				s[k] += arr[j][k];
				cur += s[k];
				MAX = max(MAX, cur);
				cur = cur < 0 ? 0 : cur;
				//cout << cur << endl;

			}
		}
	}
	return MAX;
}
int main(){

	vector< vector<int> > vec(2, vector<int>(4));
	int arr[] = { 3, 2, 1, 4, -6, 5, 2, -7 };
	int t = 0;
	for (int i = 0; i < 2; i++){
		for (int j = 0; j < 4; j++){
			vec[i][j] = arr[t++];
			//cout << vec[i][j] << endl;
		}
	}
	int res = maxSum(vec);
	cout << res << endl;
	

	return 0;
}

二维数组中,求最大矩阵和的问题通常指的是在一个给定的二维数组中,找到一个子矩阵,使得这个子矩阵的所有元素之和最大。下面是一个解决这个问题的步骤和示例代码: 1. **定义问题**:给定一个二维数组,找到一个子矩阵,使得这个子矩阵的所有元素之和最大。 2. **解决思路**: - 使用动态规划的思想,将二维数组的每一行压缩成一维数组。 - 对于每一列,计算从第i行到第j行的元素和,得到一个一维数组。 - 在这个一维数组中,找到最大子数组和。 - 重复上述步骤,直到遍历完所有可能的子矩阵。 3. **示例代码**: ```python def max_submatrix_sum(matrix): if not matrix: return 0 rows, cols = len(matrix), len(matrix[0]) max_sum = float('-inf') for i in range(rows): # Initialize a temporary array to store the sum of elements from row i to row j temp = [0] * cols for j in range(i, rows): # Add elements of current row to temp for k in range(cols): temp[k] += matrix[j][k] # Find the maximum subarray sum in temp current_sum = max_subarray_sum(temp) max_sum = max(max_sum, current_sum) return max_sum def max_subarray_sum(arr): max_sum = current_sum = arr[0] for num in arr[1:]: current_sum = max(num, current_sum + num) max_sum = max(max_sum, current_sum) return max_sum # 示例 matrix = [ [1, -2, 0, 3], [-1, 5, -1, 1], [3, -2, 3, -2] ] print(max_submatrix_sum(matrix)) # 输出: 9 ``` 在这个示例中,函数 `max_submatrix_sum` 用于计算二维数组的最大矩阵和。函数 `max_subarray_sum` 用于计算一维数组的最大子数组和。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值