uva1330 - City Game
2016-02-13 11:59
423 查看
题意:
一个m*n的矩阵,一些格子是空地(F),一些格子被租用了(R),求空地中的最大矩形的格子数*3
思路:
记录每个格子向上拥有的最大空地的个数,然后再扫描每个格子,记录每个格子向左和向右的最大空地数,再保留最大矩阵的格子数
代码:
一个m*n的矩阵,一些格子是空地(F),一些格子被租用了(R),求空地中的最大矩形的格子数*3
思路:
记录每个格子向上拥有的最大空地的个数,然后再扫描每个格子,记录每个格子向左和向右的最大空地数,再保留最大矩阵的格子数
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 1005; int n, m, g ; int main(){ int cas; scanf("%d", &cas); while (cas--) { scanf("%d%d", &n, &m); int i, j; for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { char ch = getchar(); while (ch != 'R'&&ch != 'F') ch = getchar(); if (ch == 'R') g[i][j] = 0; else g[i][j] = g[i-1][j] + 1; } } int ans = 0,l , r ; /*for (i = 1; i <= n; i++){ for (j = 1; j <= m; j++) printf("%d\t", g[i][j]); printf("\n"); }*/ for (i = 1; i <= n; i++) { g[i][0] = g[i][m + 1] = -1; for (j = 1; j <= m; j++) l[j] = r[j] = j; for (j = 1; j <= m; j++) while (g[i][j] <= g[i][l[j] - 1]) l[j] = l[j] - 1; for (j = m; j > 0; j--) { while (g[i][j] <= g[i][r[j] + 1]) r[j] = r[j] + 1; ans = max(ans, g[i][j] * (r[j] - l[j] + 1)); } } printf("%d\n", ans*3); } return 0; }
相关文章推荐
- Windows 7远程桌面连接Ubuntu 14.04
- opencv学习笔记(一):基于YCrCb颜色空间的肤色检测
- PrincetonUniversity-Coursera 算法:算法简介
- C#字典
- 收藏文章
- Key-Value Observing
- QT 跨平台之IOS sqlite加密编译
- PythonNLP学习进阶:第二章练习题(Python自然语言处理)
- Facebook总裁扎克伯格视频恭祝春节快乐
- va_list(),va_start() ,va_end()
- uva11825 - Hackers' Crackdown
- chown, fchown, fchownat, and lchown Functions
- 镶嵌在系统中的系统
- Mac下安装和配置mongoDB
- ANDROID_MARS学习笔记_S01原始版_002_实现计算乘积及menu应用
- 解决上传服务器端文字乱码
- 无线路由器密码安全设置
- MySQL—事务、多表查询
- usaco 1.5.2 pprime
- 【设计模式】——状态模式