Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
栈解法代码#include <cstdio> #include <cmath> #include <cstring> #include <stack> #include <iostream> #include <algorithm> using namespace std; #define clr( a , x ) memset ( a , x , sizeof (a) ); #define RE freopen("1.in","r",stdin); const int maxn = 2005; int n,m; int arr[maxn][maxn],data[maxn][maxn]; int solve(int row){ stack<int>s; int ans = 0; s.push(0); data[row][0] = 0; data[row][m+1] = 0; for (int j = 1; j <= m+1; ++j) { while (data[row][j] < data[row][s.top()]) { int a = data[row][s.top()]; s.pop(); int b = j - s.top() - 1; if (a * b > ans) { ans = a * b; } } s.push(j); } return ans; } int main() { // RE while (scanf("%d%d",&n,&m)!=EOF) { for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j){ scanf("%d",&arr[i][j]); } } clr(data,0); for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j){ if(arr[i][j]) data[i][j] = arr[i][j] + data[i-1][j]; else data[i][j] = 0; } } int ans = 0; for (int i = 1; i <= n; ++i){ ans = max(ans,solve(i)); } printf("%d\n", ans); } return 0; } 夹带私货链接: http://blog.csdn.net/u012469987/article/details/52173473 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator