#include<iostream> using namespace std; int GetMaxNum(int a[],int n) //求最大字段和 { int i,sum=0,maxsum=0; maxsum|=1<<31; for(i=1;i<=n;i ) { sum =a[i]; if(sum<a[i]) sum=a[i]; if(maxsum<sum) maxsum=sum; } return maxsum; } int main() { int n,i,j,k,a; int s[102][102],t[102]; int res,maxres; while(cin>>n) { for(i=0;i<=n;i ) //初始化,方便计算 s[i][0]=s[0][i]=0; for(i=1;i<=n;i ) for(j=1;j<=n;j ) { cin>>a; s[i][j]=s[i-1][j] a; //读入时就处理,累加每一列的和,s[i][j]表示第j列中i从第1行加到第i行的和 } maxres=0; maxres|=1<<31; //maxres二进制最高位(符号位)置1变为负数,变为最小负数 for(i=0;i<n;i ) for(j=i 1;j<=n;j ) { for(k=1;k<=n;k ) t[k]=s[j][k]-s[i][k]; //t[k]表示第k列中第i行到第j行的和 res=GetMaxNum(t,n); if(maxres<res) maxres=res; } cout<<maxres<<endl; } return 0; }
hdu1081
2018-06-04 11:21:35
浏览数 (1)