【题意】求n*n矩阵的最大子矩阵(即子矩阵里的每个数之和最大)
【分析】不会= =,以为要两个坐标同时怎样,各种YY,YY不出来
稍微看了下题解,发现做法挺简单的,在和最大的连续子序列的基础上枚举,将二维矩阵压扁成一维
令a[i][j]为矩阵第j列前i个元素的和,的到一个新的序列,最上面加上一行全零行
然后枚举a[j][k] - a[i][k] (i:0~n-1 j:i+1~n k为列坐标)求最大的连续子序列和,没求出一个更新max的值
#include <stdio.h>
#define N 105
int a[N][N];
int dp[N];
int main()
{
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
scanf("%d",&a[i][j]);
if(i!=1)
a[i][j] += a[i-1][j];
}
}
for(int i=1; i<=n; i++)
a[0][i]=0;
int max = -2000000;
for(int i=0; i<n; i++)
{
for(int j=i+1; j<=n; j++)
{
dp[1]=a[j][1]-a[i][1];
for(int k=2; k<=n; k++)
{
if(dp[k-1]>0)
dp[k] = dp[k-1] + a[j][k] - a[i][k];
else
dp[k] = a[j][k] - a[i][k];
if(max < dp[k])
max = dp[k];
}
}
}
printf("%d\n",max);
return 0;
}