POJ 1050 To the Max

最大子矩阵和。

把第k列从第i排到第j排的和求出来放到r数组里,在用r求最大子序列和。

各种缩减代码长度,秀一下哈哈。。。

#define X 110
#include<stdio.h>
int a[X][X],r[X];
int main(){
	int i,j,k,n,m,as;
	while(~scanf("%d",&n)){
		for(i=1;i<=n;i++)
		    for(j=1;j<=n;j++)
		        scanf("%d",&a[i][j]),a[i][j]+=a[i-1][j];
		as=-99999999;
		for(i=1;i<=n;i++)
		    for(j=i;j<=n;j++)
			for(k=1;k<=n;k++)
				r[k]=a[j][k]-a[i-1][k]+(r[k-1]<0?0:r[k-1]),
				as=as>r[k]?as:r[k];
		printf("%d\n",as);
	}
	return 0;
}


 

你可能感兴趣的:(POJ 1050 To the Max)