http://acm.hdu.edu.cn/showproblem.php?pid=1081
求子矩阵最大的和
二维转一维
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <cstdio> 2 using namespace std; 3 4 const int N=110; 5 int a[N][N],s[N][N]; 6 int f[N]; 7 int main() 8 { 9 int n; 10 while(~scanf("%d",&n)) 11 { 12 for(int i=1;i<=n;i++) 13 for(int j=1;j<=n;j++) scanf("%d",&a[i][j]); 14 for(int i=1;i<=n;i++) 15 { 16 s[i][0]=0; 17 for(int j=1;j<=n;j++) s[i][j]=s[i][j-1]+a[i][j]; 18 } 19 int ans=-10000000; 20 for(int i=0;i<n;i++) 21 for(int j=i+1;j<=n;j++) 22 { 23 int sum=0; 24 for(int k=1;k<=n;k++) 25 { 26 sum+=s[k][j]-s[k][i]; 27 if(sum>ans) ans=sum; 28 if(sum<0) sum=0; 29 } 30 } 31 printf("%d\n",ans); 32 } 33 return 0; 34 }