不准发言
- 积分
- 1705
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2010-5-3
- 最后登录
- 1970-1-1
|
本帖最后由 Narashy 于 2011-7-6 04:36 编辑
回复 9# wwwyhx
恩!这题可以用这个一模一样的题测一下:
http://poj.org/problem?id=3494
附上我的code:
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- using namespace std;
- const int N = 2010;
- int m, n;
- int h[N][N], lt[N], rt[N];
- int main()
- {
- int i, j, k, ans;
- while(scanf("%d%d",&m,&n)==2)
- {
- memset(h, 0, sizeof(h));
- ans = 0;
-
- for(i=1;i<=m;i++){
- for(j=1;j<=n;j++){
- scanf("%d",&k);
- h[i][j] = k? 1+h[i-1][j]: 0;
- lt[j] = rt[j] = j;
- }
- h[i][0] = h[i][n+1] = -1;
- for(j=1;j<=n;j++)
- {
- while(h[i][j]<=h[i][lt[j]-1]) lt[j]=lt[lt[j]-1];
- while(h[i][n-j+1]<=h[i][rt[n-j+1]+1]) rt[n-j+1]=rt[rt[n-j+1]+1];
- }
- for(j=1;j<=n;j++)
- ans = max(ans, h[i][j]*(rt[j]- lt[j]+1));
- }
- printf("%d\n",ans);
- }
- return 0;
- }
-
-
复制代码 |
|