最大矩陣和

一個M*N的矩陣,找到此矩陣的一個子矩陣,並且這個子矩陣的元素的和是最大的,輸出這個最大的值。
例如:3*3的矩陣:

-1 3 -1
2 -1 3
-3 1 2

和最大的子矩陣是:

3 -1
-1 3
1 2
Input第1行:M和N,中間用空格隔開(2 <= M,N <= 500)。 
第2 - N + 1行:矩陣中的元素,每行M個數,中間用空格隔開。(-10^9 <= Mii <= 10^9)Output輸出和的最大值。如果所有數都是負數,就輸出0。Sample Input
3 3
-1 3 -1
2 -1 3
-3 1 2
Sample Output

7


#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
	int N[505][505];
	memset(N,0,sizeof(N));
	int n,m;
	cin>>m>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>N[i][j];
			N[i][j]+=N[i-1][j];
		}
	}
	int sum,ans=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=i;j<=n;j++)
		{
			sum=0;
			for(int k=1;k<=m;k++)
			{
				sum+=N[j][k]-N[i-1][k];
				if(sum<0)
					sum=0;
				ans=max(sum,ans);
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章