最大子矩阵是一种典型的dp问题。某种程度上说是最大连续子序列和问题的扩展。
1081
原题地址
这是最常见的最大子矩阵问题的体型。简单的解决方案就是把列累加,遍历任意两行的累加值的差值,然后就转换成了普通的最大连续子序列和问题。从而将二维问题转换为一维。时间复杂度较高为O(N^3)
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAX=104;
int a[MAX][MAX];
int dp[MAX];
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(a,0,sizeof a);
memset(dp,0,sizeof dp);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
scanf("%d",&a[i][j]);
a[i][j]+=a[i-1][j];
}
}
int max_sum=0;
for(int i=1; i<=n; i++)
{
for(i