To the Max

链接

[http://poj.org/problem?id=1050]

题意

给你一个矩阵,让你求子矩阵中的元素之和最大

分析

其实跟最大和子序列一样只不过维数增加了,你只需要降维就好了

代码

#include<iostream>
#include<string.h>
using namespace std;
#define ll long long

int m[200][200];
int main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int n,i,j,k;
	while(cin>>n){
		memset(m,0,sizeof(m));
		for(i=1;i<=n;i++){
			for(j=1;j<=n;j++)
			cin>>m[i][j],m[i][j]+=m[i-1][j];
		}
	 int sum=0;
	 int ans=-130; 
	 for(i=1;i<=n;i++){
	 	for(j=i;j<=n;j++){
	 		sum=0;
	 		for(k=1;k<=n;k++){
	 			sum+=m[j][k]-m[i-1][k];//第k列第i个元素到第j个元素之和
				 if(sum<0) sum=0;//如果小于0从新的地方开始
				 if(sum>ans) ans=sum;//更新最大值 
			 }
		 }
	   }
	   cout<<ans<<endl; 
	} 
	return 0;
} 
posted @ 2018-10-05 14:23  ChunhaoMo  阅读(105)  评论(0编辑  收藏  举报