SEERC 2004 / UVa 1330 City Game (扫描)

1330 - City Game

Time limit: 3.000 seconds

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=460&page=show_problem&problem=4076

Bob is a strategy game programming specialist. In his new city building game the gaming environment is as follows: a city is built up by areas, in which there are streets, trees, factories and buildings. There is still some space in the area that is unoccupied. The strategic task of his game is to win as much rent money from these free spaces. To win rent money you must erect buildings, that can only be rectangular, as long and wide as you can. Bob is trying to find a way to build the biggest possible building in each area. But he comes across some problems : he is not allowed to destroy already existing buildings, trees, factories and streets in the area he is building in.

Each area has its width and length. The area is divided into a grid of equal square units. The rent paid for each unit on which you're building stands is 3$.

Your task is to help Bob solve this problem. The whole city is divided into K areas. Each one of the areas is rectangular and has a different grid size with its own length M and width N. The existing occupied units are marked with the symbol R. The unoccupied units are marked with the symbol F.

Input

The first line of the input file contains an integer K : determining the number of datasets. Next lines contain the area descriptions. One description is defined in the following way: The first line contains two integers-area length M<=1000 and width N<=1000, separated by a blank space. The next M lines contain N symbols that mark the reserved or free grid units, separated by a blank space. The symbols used are:

R : reserved unit F : free unit

In the end of each area description there is a separating line.

Output

本文URL地址:http://www.bianceng.cn/Programming/sjjg/201410/45431.htm

For each data set in the input file print on a separate line, on the standard output, the integer that represents the profit obtained by erecting the largest building in the area encoded by the data set.

Sample Input

2
5 6
R F F F F F
F F F F F F
R R R F F F
F F F F F F
F F F F F F

5 5
R R R R R
R R R R R
R R R R R
R R R R R
R R R R R

Sample Output

45
0

此题是POJ 2559 / HDU 1506 Largest Rectangle in a Histogram的二维扩展。

思路请参考这篇。

完整代码:

/*0.072s*/

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1000;  

int mat[maxn][maxn], up[maxn][maxn], left[maxn][maxn], right[maxn][maxn];  

int main()
{
    int T;
    scanf("%d", &T);
    while (T--)
    {
        int m, n;
        scanf("%d%d", &m, &n);
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
            {
                int ch = getchar();
                while (ch != 'F' && ch != 'R') ch = getchar();
                mat[i][j] = ch == 'F' ? 0 : 1;
            }
        int ans = 0;
        for (int i = 0; i < m; i++)  // 从上到下逐行处理
        {
            int lo = -1, ro = n;
            for (int j = 0; j < n; j++) // 从左到右扫描,维护up和left
                if (mat[i][j])
                {
                    up[i][j] = left[i][j] = 0;
                    lo = j;
                }
                else
                {
                    up[i][j] = (i == 0 ? 1 : up[i - 1][j] + 1);
                    left[i][j] = (i == 0 ? lo + 1 : max(left[i - 1][j], lo + 1));
                }
            for (int j = n - 1; j >= 0; j--) // 从右到左扫描,维护right并更新答案
                if (mat[i][j])
                {
                    right[i][j] = n;
                    ro = j;
                }
                else
                {
                    right[i][j] = (i == 0 ? ro - 1 : min(right[i - 1][j], ro - 1));
                    ans = max(ans, up[i][j] * (right[i][j] - left[i][j] + 1));
                }
        }
        printf("%d\n", ans * 3);
    }
    return 0;
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索length
, area
, and
, is
The
gameserver.rc、game88city、gamecity、www.game88city.com、game88city.com,以便于您获取更多的相关知识。

时间: 2024-08-03 22:52:19

SEERC 2004 / UVa 1330 City Game (扫描)的相关文章

uva 1330 City Game

点击打开链接uva 1330 思路:悬线法求解最大子矩阵 分析: 1 详细资料请见点击打开链接 2 有个地方需要注意的是输入格式,有可能输入字母后面会有多个空格,所以必须要过滤掉这些空格 代码: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int MAXN = 1010; int mat[MAXN][M

uva 1330 - City Game 模拟

    扫描线,记录l,r,u,答案就是(r+l-1)*u     实际上只要开个2维数组就可以了 /* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,please indicate the source** */ #include <iostream> #include <cstdio> #include <cstdlib> #include <

UVA之1330 - City Game

[题目] Bob is a strategy game programming specialist. In his new city building game the gaming environment is as follows: a city is built up by areas, in which there are streets, trees, factories and buildings. There is still some space in the area tha

算法题:uva 1330

题目链接: http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&category=460&page=show_problem&problem=4076 以前做过一道一维的,这题只是变成了二维的,其他方法都一样.HDU 1506  Largest Rectangle in a Histogram   题解 代码1: #include<cstdio> #include<cs

CERC 2004 / UVa 1335 Beijing Guards:二分&amp;amp;贪心&amp;amp;想法题

1335 - Beijing Guards Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_problem&problem=4081 Beijing was once surrounded by four rings of city walls: the Forbidden City Wa

Shanghai 2006 / UVa 1382 Distant Galaxy:枚举&amp;amp;扫描&amp;amp;动态维护

1382 - Distant Galaxy Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=460&page=show_problem&problem=4128 You are observing a distant galaxy using a telescope above the Astronomy Tower

UVa 507:Jill Rides Again

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=113&page=show_problem&problem=448 类型: 最大连续和 原题: Jill likes to ride her bicycle, but since the pretty city of Greenhills where she lives has grown, Jill oft

UVa 105 The Skyline Problem (想法题)

105 - The Skyline Problem Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=41 这题有个很巧的思路:离散化. 什么意思呢?既然每栋大楼的高和左右边界都是整数,那么不妨把线段用一个个整点表示.既然最后只求一个轮廓,那么对每个横坐标,就记

Flash MX 2004新特性实例学习五

   实例六.Text Enhancements 一.涉及特性 在实例中,主要涉及在Flash MX 2004中引用和显示外部的css文件和html文件.这些都是在Flash MX 2004中才有的新特性,应用也非常方便.本实例在Flash MX 2004中的操作非常简单,不过这正从侧面反映了它的功能强大. 二.制作过程 1.建立一个文件,命名为sample.css.其内容如下: headline { font-family: Arial,Helvetica,sans-serif; font-s