HDU 1505 City Game

简介:
Problem Description
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 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 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
 
1506的升级版。换成在二维上的了=。=
依旧是那个方法=。=复杂的方法
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<limits.h>
using namespace std;
const int maxn=1100;
char mp[maxn][maxn];
int a[maxn][maxn];
int l[maxn],r[maxn];
int n,m,t;

int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        getchar();
        for(int i=1;i<=m;i++)
            a[0][i]=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
                cin>>mp[i][j];
        }
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(mp[j][i]=='F')
                    a[j][i]=a[j-1][i]+1;
                else
                    a[j][i]=0;
            }
        }
        int ans=-1;
        for(int i=1;i<=n;i++)
        {
            l[1]=1;
            r[m]=m;
            for(int j=2;j<=m;j++)
            {
                if(a[i][j]==0)
                    continue;
                int t=j;
                while(t>1&&a[i][j]<=a[i][t-1])
                    t=l[t-1];
                l[j]=t;
            }
            for(int j=m-1;j>=1;j--)
            {
                if(a[i][j]==0)
                    continue;
                int t=j;
                while(t<m&&a[i][j]<=a[i][t+1])
                    t=r[t+1];
                r[j]=t;
            }
            for(int j=1;j<=m;j++)
            {
               if((r[j]-l[j]+1)*a[i][j]>ans)
                 ans=(r[j]-l[j]+1)*a[i][j];
            }
        }
        printf("%d\n",ans*3);
    }
    return 0;
}
简单的方法=。=,设一个num数组。耗的内存和时间都少了(事实上时间差点儿相同)
可是理解起来去easy些=。=
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<limits.h>
using namespace std;
const int maxn=1100;
char mp[maxn][maxn];
int num[maxn];
int n,m,t;

int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        getchar();
        memset(num,0,sizeof(num));
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
                cin>>mp[i][j];
        }
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(mp[i][j]=='F')//列中连续个数
                    num[j]++;
                else
                    num[j]=0;
            }
            for(int j=1;j<=m;j++)
            {
                if(!num[j])
                    continue;
                int cnt=1;
                for(int k=1;j-k>=1&&num[j]<=num[j-k];k++)
                    ++cnt;
                for(int k=1;j+k<=m&&num[j]<=num[j+k];k++)
                    ++cnt;
                if(ans<num[j]*cnt)
                    ans=num[j]*cnt;
            }
        }
        printf("%d\n",ans*3);
    }
    return 0;
}

附张图:






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5059286.html,如需转载请自行联系原作者

相关文章
|
9月前
|
XML Java 数据格式
Spring Bean的定义(含创建Bean的三种方式)
Spring Bean的定义(含创建Bean的三种方式)
|
算法
动归背包2
动归背包2
71 0
|
机器学习/深度学习 算法
F1是合适的指标吗?那么F2 F3…F_beta呢?
F1是合适的指标吗?那么F2 F3…F_beta呢?
149 0
F1是合适的指标吗?那么F2 F3…F_beta呢?
|
XML JSON 数据格式
Web服务
Web服务 Web服务是基于XML格式的一种数据传输方式,既可以在内部使用,也可以通过互联网公开,供其他服务器的应用程序调用,不受操作系统和编程语言的约束。 客户端调用远程服务时所传递的数据或对象,需要按照某种协议格式转换后再发送到网络上,这个过程称为串行化,反方向解构称为并行化。 SOAP SOAP,Simple Object Access Protocol,简单对象访问协
1332 0
|
计算机视觉
【OpenCV学习】运动检测实例
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/   /************************************************** * 背景建模,运动物体检测 * ********************...
553 0
|
NoSQL Shell 网络架构
【Mongodb】 Replica set的主从切换测试
Replica set 为我们提供了自动故障切换功能,这个机制是由mongodb自己来操作的,它根据从库的优先级或者数据新鲜度(也就是最新的从主库同步数据的那个节点)来选择primary,而当以前的primary起来之后,会成为secondary ,接受新的primary 的日志。
803 0
|
PHP
wordpress安装openID插件指南
重要提示:本站由于更换了模板,新模板暂不支持openID,但敬请信任经过千锤百炼测试的openid插件 整个过程非常非常简单,呵呵 1,首先,下载该插件 2,解压缩,将plugin目录下的op...
719 0

热门文章

最新文章