最大子矩阵
枚举每种子矩阵情况,然后就是一个一维dp了
#include <iostream>
#include <stdio.h>
#include <limits>
using namespace std;
const int INF=numeric_limits<int>::min();
int array[101][101];
int aa[101];
int main()
{
int t;
while (scanf("%d",&t)!=EOF)
{
for (int i=0; i<t; ++i)
{
for (int j=0; j<t; ++j)
scanf("%d",&array[i][j]) ;
}
int maxsum=INF;
int sum=0;
for (int i=0; i<t; ++i)
{
memset (aa,0,sizeof(aa));
for (int k=i; k<t; ++k)
{sum=0;
for (int j=0; j<t; ++j)
aa[j]+=array[k][j];
for (int i=0; i<t; ++i)
{
sum+=aa[i];
if (sum>maxsum)
maxsum=sum;
if (sum<0)
sum=0;
}
}
}
cout<<maxsum<<endl;
}
}
本文介绍了一种求解二维数组中最大子矩阵和的高效算法。通过枚举子矩阵边界,利用一维动态规划计算最大连续子序列和,最终找到整个矩阵中具有最大和的子矩阵。

1100

被折叠的 条评论
为什么被折叠?



