蓝桥杯《最大子阵》

题目描述

给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大。

其中,A的子矩阵指在A中行和列均连续的一块。

样例说明
取最后一列,和为10。

输入格式

输入的第一行包含两个整数n,  m,分别表示矩阵A的行数和列数。 
接下来n行,每行m个整数,表示矩阵A。 

数据规模和约定
对于100%的数据,1< =n,  m< =500,A中每个元素的绝对值不超过5000。

输出格式

输出一行,包含一个整数,表示A中最大的子矩阵中的元素和。 

样例输入

3 3 
-1 -4 3
3 4 -1
-5 -2 8

样例输出

10

参考代码

#include
#include
#include
using namespace std;
int main() {
	
    int n,m;
    cin>>n>>m;
    vector> nums(n+1,vector(m+1,0));
    int tmp,sum=INT_MIN;
    for (int i = 1; i<=n; i++) {
        for (int j = 1; j<=m; j++){
            cin>>tmp;
            nums[i][j]=tmp+nums[i-1][j];
        }
    }
    for (int i = 1; i<=n; i++) {
        for (int j = i; j<=n; j++){
            int ans=0;
            for (int k = 1; k<=m; k++){
                ans+=nums[j][k]-nums[i-1][k];
              if(ans>sum)
			  	sum=ans;
              if(ans<0)
			  	ans=0;
          }
      }
  }
  cout<

你可能感兴趣的:(蓝桥杯,算法,c++)