专栏首页mlla----3695 City Game(最大子矩阵)

la----3695 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 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 

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

代码 :
 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn = 1000;
 5 int sac[maxn][maxn];
 6 int up[maxn][maxn],left[maxn][maxn],right[maxn][maxn];
 7 int main()
 8 {
 9     int T;
10     scanf("%d",&T);
11     while(T--)
12     {
13      int m,n;
14      scanf("%d%d",&m,&n);
15      for(int i=0;i<m;i++)
16      {
17          for(int j=0;j<n;j++)
18          {
19              int ch=getchar();
20              while(ch!='F'&&ch!='R')
21                 ch=getchar();
22                sac[i][j]=ch=='F'?0:1;
23          }
24      }
25      int ans=0;
26      for(int i=0;i<m;i++){
27        int lo=-1,ro=n;
28       for(int j=0;j<n;j++){
29          if(sac[i][j]==1)
30          {
31              up[i][j]=left[i][j]=0;
32              lo=j;
33          }
34          else
35          {
36              up[i][j]=i==0?1:up[i-1][j]+1;
37              left[i][j]=i==0?lo+1:max(left[i-1][j],lo+1);
38          }
39        }
40        for(int j=n-1;j>=0;j--)
41        {
42            if(sac[i][j]==1)
43            {
44                right[i][j]=n;
45                ro=j;
46            }
47            else
48            {
49             right[i][j]=i==0?ro-1:min(right[i-1][j],ro-1);
50             ans=max(ans,up[i][j]*(right[i][j]-left[i][j]+1));
51            }
52        }
53      }
54      printf("%d\n",ans*3);
55     }
56   return 0;
57 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • POJ 1964&HDU 1505&HOJ 1644 City Game(最大0,1子矩阵和总结)

    最大01子矩阵和,就是一个矩阵的元素不是0就是1,然后求最大的子矩阵,子矩阵里的元素都是相同的。 这个题目,三个oj有不同的要求,hoj的要求是5s,...

    ShenduCC
  • POJ数据结构专辑(含部分题解)

    1195 Mobile phones 树状数组 题解

    xindoo
  • 1084: [SCOI2005]最大子矩阵

    1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1325  Sol...

    HansBug
  • P2331 [SCOI2005]最大子矩阵

    题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵不能相互重叠。 输入输出格式 输入格式: 第一行...

    attack
  • 51Nod 1051 最大子矩阵和

    1051 最大子矩阵和 基准时间限制:2 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个M*N的矩阵,找到此矩阵的一个子矩阵,并且这个子...

    attack
  • hdu----(1599)最大子矩阵(几何/dp)

    最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (J...

    Gxjun
  • 【 HDU1081 】 To The Max (最大子矩阵和)

    Given a two-dimensional array of positive and negative integers, a sub-rectangle...

    饶文津
  • 蚁群算法解决旅行商(TSP)问题

    在更新信息素的过程中,只有最优路线上的信息素会进行增加操作,且不能超过信息素最大值。

    mwangblog
  • 51Nod-1157-全是1的最大子矩阵

    ACM模版 描述 ? 题解 很经典的一个问题,最大 11 矩阵模板,直接套。 代码 #include <iostream> using namespace s...

    f_zyj

扫码关注云+社区

领取腾讯云代金券