POJ - 1964 City Game

原创 2013年12月01日 21:21:47

题意:给定一个m*n的矩阵,其中一些格子是空地F,其他的是障碍R,找出一个最大的全部有F组成的面积最大的矩阵,输出面积乘以3的结果

思路: 用简单的枚举左上角坐标,长,宽显然是会超时的,这里有一种求极大子矩阵问题的方法:用up(i,j),left(i,j),right(i,j)分别表示某个点的最大的上连续的空地长度和向左可以得到相同up的最大宽度,以及向右可以得到的相同up的最大宽度,还用lo,ro分别表示距离左右的最近障碍的列

#include <cstdio>
#include <iostream>
#include <cstring>
#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 n,m;
        scanf("%d%d%*c",&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++)
                if (mat[i][j] == 1){
                    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--)
                if (mat[i][j] == 1){
                    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;
}



POJ1964/UVALive 3029 -City Game -求最大子矩形-(暴力枚举/dp)

给n*m的地图,只有R/F,求最大的F矩形面积(就是个数),输出答案*3 n,m 看到三秒。。。大胆尝试一下跑n^3。。。。结果卡过了。。2s... 先n^2预处理一下,给这个n*m矩阵涂色:...
  • viphong
  • viphong
  • 2016年03月06日 09:50
  • 694

Poj 1964 City Game

City Game Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 4730   Acce...
  • CSLDBLYDX
  • CSLDBLYDX
  • 2014年05月26日 12:21
  • 180

poj 1964 City Game

http://poj.org/problem?id=1964dp题目的意思就是找出一个最大的矩形, 这个矩形由F组成, 最后的答案就是max*3.思路: 逐行的加入, 每次加入求能构成的最大矩形......
  • SMCwwh
  • SMCwwh
  • 2010年10月16日 21:37
  • 2125

POJ 1964 City Game

单调栈
  • Orion_Rigel
  • Orion_Rigel
  • 2016年08月22日 18:21
  • 108

POJ 1964 City Game 笔记

M*N的区域,R代表占用的地方,F代表空地。求空地中最大一块矩形面积*3。
  • woniupengpeng
  • woniupengpeng
  • 2017年06月11日 21:10
  • 48

hdu 1505 City Game (动态规划)

City Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...
  • u011721440
  • u011721440
  • 2014年11月12日 16:50
  • 875

HDU 1505 & POJ 1964 City Game (递推+扫描法)

题意:一个矩阵,有些格子是F,有些是T,要你找到最大的子矩阵使得矩阵内全是F 思路:直接枚举每个子矩阵,显然复杂度是O(m^3 n^3),显然TLE。  我们可以使用扫描法:用up(i,j),left...
  • blzorro
  • blzorro
  • 2013年08月15日 03:48
  • 1400

HDU1505_City Game【最大完全子矩阵】

City Game 题目大意:给你一个M*N的区域。R代表被占用,F代表空闲。每块空闲 的区域价值3美金,求全部由空闲区域围成的矩形的价值 思路:1506的升级版。不同的是,1505是二维的。把2维...
  • u011676797
  • u011676797
  • 2014年10月20日 16:38
  • 1136

CodeForces 630D:Hexagons!【水】

Hexagons! Time Limit:500MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Sta...
  • lin14543
  • lin14543
  • 2016年03月09日 17:25
  • 463

poj3277City Horizon

题目大意: 很多矩形
  • u010073953
  • u010073953
  • 2014年06月06日 11:34
  • 587
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ - 1964 City Game
举报原因:
原因补充:

(最多只允许输入30个字)