UVa 10074 - Take the Land

来源:互联网 发布:手机淘宝店铺二维码 编辑:程序博客网 时间:2024/05/02 00:36

这题和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;}