您的位置:首页 > 其它

51nod 1051 最大子矩阵和

2018-02-09 18:01 239 查看
没想到居然可以O(n3)暴力过

就是大概之前的  最大连续子序列和

加成2维度了  枚举起始列 和 终止列 然后计算从1到n行最大的子矩阵的和

 

注意n 和 m 的输入顺序!!

 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 600;
ll s[maxn][maxn],sum[maxn][maxn];

int main ()
{
int m,n;
scanf("%d %d",&m,&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%lld",&s[i][j]);
sum[i][j] = sum[i][j-1] + s[i][j];//sum[i][j]记录第i行从1到j的前缀和
}
}
ll res=0;
for(int l=1;l<=m;l++)
{
for(int j=0;j+l<=m;j++)//枚举起始 终止列
{
int r = l+j;
ll x= 0;
for(int k=1;k<=n;k++)//每行
{
x = max(x,(ll)0) +sum[k][r] -sum[k][l-1];
res = max(res,x);
}
}
}
printf("%lld\n",res);
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: