您的位置:首页 > 其它

蓝桥杯 历届试题 最大子阵

2018-03-11 20:51 190 查看
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#define maxn 505
#define INF 99999999
#define LL long long
#define PI 3.141592653589
#define MOD 10007
using namespace std;
int n,m;
int zz[maxn][maxn];
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
memset(zz,0,sizeof(zz));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int t;
cin>>t;
zz[i][j]=zz[i-1][j]+t;
//zz[i][j]表示第j列第i个数(包括第i个数)之前的数的和;
}
}
int maxi=-INF;
int ans;
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)//前两重循环是某一列上截一段序列的和
{
ans=0;
for(int u=1;u<=m;u++)
{
ans+=zz[j][u]-zz[i-1][u];
if(ans>maxi)
maxi=ans;
if(ans<0)
ans=0;
}
}
}
cout << maxi << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: