这题和836一样,输入比那个简单的很多。
/*************************************************************************
> File Name: 10074.cpp
> Author: Toy
> Mail: ycsgldy@163.com
> Created Time: 2013年05月24日 星期五 21时02分01秒
************************************************************************/
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstdlib>
#include <climits>
#include <sstream>
#include <fstream>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
using namespace std;
const int INF = 0x7fffffff;
int row, cul, A[110][110], x;
int max1D ( int a[] ) {
int ans = -INF;
int s = 0;
for ( int i = 0; i < cul; ++i ) {
if ( a[i] != 0 ) s += a[i];
else s = a[i];
ans = max ( ans, s );
}
return ans;
}
int max2D ( int a[][110] ) {
int ans = -INF;
int s[110];
for ( int i = 0; i < row; ++i ) {
memset ( s, 0, sizeof ( s ) );
for ( int j = i; j < row; ++j ) {
for ( int k = 0; k < cul; ++k ) {
if ( j == i ) s[k] += a[j][k];
else {
if ( s[k] != 0 && a[j][k] != 0 ) s[k] += a[j][k];
else s[k] = 0;
}
}
ans = max ( ans, max1D ( s ) );
}
}
return ans;
}
int main ( ) {
while ( scanf ( "%d%d", &row, &cul ) == 2 ) {
if ( row == 0 && cul == 0 ) break;
for ( int i = 0; i < row; ++i )
for ( int j = 0; j < cul; ++j ) {
scanf ( "%d", &x );
if ( x == 0 ) A[i][j] = 1;
else A[i][j] = 0;
}
printf ( "%d\n", max2D ( A ) );
}
return 0;
}