最大子矩阵
- 题目链接:最大子矩阵
- 思路 :构造一个二维的前缀和,然后暴力
#include<bits/stdc++.h>
#define maxn 205
#define INF 0x3f3f3f3f
#define go(i,l,r) for(int i=l;i<=r;++i)
#define down(i,l,r) for(int i=l;i>=r;--i)
#define mst(a) memset(a,0,sizeof a)
#define ll long long
using namespace std;
int A[maxn][maxn];
int sum [maxn][maxn];
int dp [maxn][maxn];
int main()
{
ios::sync_with_stdio(false);
int n;
cin >> n;
for(int i = 1; i<=n; i++)
for(int j = 1; j<=n; j++)
{
cin >> A[i][j];
sum[i][j] = sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1] +A[i][j];
}
int maxx = A[1][1];
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=n; j++)
{
for(int y = 0; y<=i-1; y++)
{
for(int x = 0; x<=j-1; x++)
{
dp[i][j] = max(dp[i][j],sum[i][j] - sum[y][j]- sum[i][x] + sum[y][x]);
maxx = max(maxx,dp[i][j]);
}
}
}
}
cout<<maxx<<endl;
return 0;
}