记录编号 |
331128 |
评测结果 |
AAAAAAAAAA |
题目名称 |
牛宫 |
最终得分 |
100 |
用户昵称 |
Smile |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
3.359 s |
提交时间 |
2016-10-27 11:18:03 |
内存使用 |
0.52 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int maxn=200+10;
const int INF=0x3f3f3f3f;
struct NB {
LL num;
int id;
bool operator < (const NB& n) const {
return num<n.num;
}
} s[maxn];
LL a[maxn][maxn];
int n, m, ans, cnt;
LL Qin() {
LL x=0, f=1;
char c=getchar();
while(c<'0' || c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0' && c<='9') x=x*10+c-'0', c=getchar();
return x*f;
}
int main()
{
freopen("long.in", "r", stdin);
freopen("long.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
a[i][j]=Qin();
a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
}
}
for(int x=1; x<=m; x++) {
for(int y=x; y<=m; y++) {
cnt=-1;
s[++cnt]=((NB){0, 0});
for(int i=1; i<=n; i++) {
LL S=a[i][y]-a[i][x-1];
s[++cnt]=((NB){S, i});
}
sort(s, s+cnt+1);
int MIN=INF;
for(int i=0; i<=cnt; i++) {
MIN=min(MIN, s[i].id);
ans=max(ans, (s[i].id-MIN)*(y-x+1));
}
}
}
printf("%d", ans);
return 0;
}