uva1330 - City Game
来源:互联网 发布:淘宝详情页思路 编辑:程序博客网 时间:2024/06/15 05:42
题意:
一个m*n的矩阵,一些格子是空地(F),一些格子被租用了(R),求空地中的最大矩形的格子数*3
思路:
记录每个格子向上拥有的最大空地的个数,然后再扫描每个格子,记录每个格子向左和向右的最大空地数,再保留最大矩阵的格子数
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 1005;int n, m, g[N][N];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[N], r[N]; /*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;}
0 0
- uva1330 - City Game
- 【UVA1330】City game
- 【巧妙预处理系列】【UVA1330】City game
- uva1330
- City Game
- City Game
- City Game
- City Game
- City Game
- City Game
- City Game
- City Game
- poj 1964 City Game
- HDU 1505 City Game
- hdu 1505 City Game
- POJ 1964 City Game
- 【DP】 hdu1505 City Game
- HDU1505/POJ1964 City Game
- [20160213]练习集合
- Key-Value Observing
- opencv学习笔记(一):基于YCrCb颜色空间的肤色检测
- Java 回顾笔记 1
- hdu 5298 Solid Geometry Homework
- uva1330 - City Game
- hdu 1520 树形dp
- 推导条件随机场参数估计的全过程
- uva1121 - Subsequence
- POJ 3692 Kindergarten(最大独立集)
- UI基础-01第一个iOS应用程序
- 区间问题三部曲(1) : 在线区间最值算法
- 20160212
- 计算机考研的看法