作者:石某俊 | 来源:互联网 | 2023-10-11 13:46
本文由编程笔记#小编为大家整理,主要介绍了poj 1050 最大子矩阵相关的知识,希望对你有一定的参考价值。
a11 a12 a13 a14 a15
a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
枚举矩阵每一列的区间,当成最长子串的dp方式就能过了
你把a21 a31 a41 看成一个元素,值是这三个元素的和,后面的列同理
https://www.cnblogs.com/GodA/p/5237061.html
这个人讲的非常好
#include<iostream>
#include
using namespace std;
const int maxn = 105;
int arr[maxn][maxn];
int sum[maxn][maxn];
int main()
{
int n;
scanf("%d",&n);
for(int i = 1; i <= n; ++i )
{
for(int j = 1; j <= n; ++j)
{
scanf("%d",&arr[i][j]);
}
}
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
{
sum[i][j] = sum[i][j-1] + arr[j][i];
}
}
/*for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
{
printf("%d
",sum[i][j]);
}
}*/
int maix = 0;
for(int i = 1; i <= n; ++i)
{
for(int j = i+1; j <= n; ++j)
{
int b = 0;
for(int k = 1; k <= n; ++k )
{
if(b > 0)
{
b += sum[k][j] - sum[k][i];
}
else
{
b = sum[k][j] - sum[k][i];
}
if(b > maix)
maix = b;
}
}
}
printf("%d
",maix);
}