最大子矩阵之和
题目
给出一个N [2<=N<=100],并给出一个N*N的矩阵,矩阵中的数为[-127,127]之间。求出矩阵中一块子矩阵的最大和。
比如:
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
和最大的子矩阵应该是这个:
9 2
-4 1
-1 8
它的和是15。
Sample Input
4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
Sample Output
15
解析
输出从一个正方形中截取一个矩阵可以得到的最大和
DP无所不能!
上代码!
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[1001][1001],b[1001],s[1001][1001],n,m,maxn=0;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
s[i][j]=s[i-1][j]+a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
int sum=0;
for(int k=1;k<=n;k++)b[k]=s[j][k]-s[i-1][k];
for(int k=1;k<=n;k++)
{
sum+=b[k];
maxn=max(maxn,sum);
if(sum<0)sum=0;
}
}
}
cout<<maxn;
return 0;
}