hdu 1505(最大子矩阵)
City Game
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6140 Accepted Submission(s): 2618
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.
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.
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.
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
0
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
const int N = ; int n,m;
char a[N][N];
int mp[N][N];
int L[N],R[N];
void input()
{
int i,j;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
cin>>a[i][j];
for(i=1; i<=m; i++)
mp[0][i]=0;
for(i=1; i<=m; i++)
{
for(j=1; j<=n; j++)
{
if(a[j][i]=='F')
mp[j][i]=mp[j-1][i]+1;
else
mp[j][i]=0;
}
}
/*for(int i=1;i<=n;i++){ //test
for(int j=1;j<=m;j++){
printf("%d ",mp[i][j]);
}
printf("\n");
}*/
}
/*void input(){
memset(mp,0,sizeof(mp));
for(int i=1;i<=n;i++){
gets(a[i]);
for(int j=1;j<=m;j++){
if(i==1) { ///预处理mp
if(a[i][(j-1)*2]=='R') mp[i][j]=0;
if(a[i][(j-1)*2] =='F') mp[i][j]=1;
}else{
if(a[i-1][(j-1)*2]=='R') {
if(a[i][(j-1)*2] =='R') mp[i][j]=0;
if(a[i][(j-1)*2] =='F') mp[i][j]=1;
}
else {
if(a[i][(j-1)*2] =='R') mp[i][j]=0;
if(a[i][(j-1)*2] =='F') mp[i][j]+=mp[i-1][j]+1;
}
}
}
}
/*for(int i=1;i<=n;i++){ //test
for(int j=1;j<=m;j++){
printf("%d ",mp[i][j]);
}
printf("\n");
}*/
}*/
int main()
{
int tcase;
scanf("%d",&tcase);
while(tcase--){
scanf("%d%d",&n,&m);
getchar();
input();
int mx = -;
for(int k=;k<=n;k++){
L[]=;
R[m]=m;
for(int i=;i<=m;i++){ ///向右延伸
int t = i;
if(t>&&mp[k][i]<=mp[k][t-]) t = L[t-];
L[i] =t;
}
for(int i=m-;i>=;i--){
int t = i;
if(t<m&&mp[k][i]<=mp[k][t+]) t = R[t+];
R[i] = t;
}
for(int i=;i<=m;i++){
if((R[i]-L[i]+)*mp[k][i]>mx) mx = (R[i]-L[i]+)*mp[k][i];
}
}
printf("%d\n",mx*);
} }
hdu 1505(最大子矩阵)的更多相关文章
- HDU 1505 City Game (hdu1506 dp二维加强版)
F - City Game Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submi ...
- hdu 1505(dp求最大子矩阵)
题意:就是让你求出全由F组成的最大子矩阵. 分析:这是hdu 1506的加强版,只不过这道题变成了2维的,那我们就一行一行的来.具体的分析见1506的博客:http://www.cnblogs.com ...
- POJ 1964&HDU 1505&HOJ 1644 City Game(最大0,1子矩阵和总结)
最大01子矩阵和,就是一个矩阵的元素不是0就是1,然后求最大的子矩阵,子矩阵里的元素都是相同的. 这个题目,三个oj有不同的要求,hoj的要求是5s,poj是3秒,hdu是1秒.不同的要求就对应不同的 ...
- hdu 1559 最大子矩阵
最大子矩阵 Time Limit: 30000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- hdu 1081(最大子矩阵和)
题目很简单,就是个最大子矩阵和的裸题,看来算法课本的分析后也差不多会做了.利用最大子段和的O(n)算法,对矩阵的行(或列)进行 i和j的枚举,对于第 i到j行,把同一列的元素进行压缩,得到一整行的一维 ...
- hdu 1559 最大子矩阵 (简单dp)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1559 #include <cstring> #include <cstdlib> ...
- HDU 1559 最大子矩阵 (DP)
题目地址:pid=1559">HDU 1559 构造二维前缀和矩阵.即矩阵上的点a[i][j]表示左上方的点为(0,0),右下方的点为(i,j)的矩阵的和.然后枚举每一个矩阵的左上方的 ...
- HDU 1505 Largest Rectangle in a Histogram && HDU 1506 City Game(动态规划)
1506意甲冠军:给你一个连续的直方图(拼贴底部长度1).求连续基质区. 对每一个直方图,分别向左向右进行扩展. #include<cstdio> #include<stdlib.h ...
- ACM HDU 1559 最大子矩阵
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1559 这道题 挺好的,当时想出解法的时候已经比较迟了.还是平时看得少. 把行与列都进行压缩.ans[i ...
随机推荐
- 【计数原理】【UVA11538】 Chess Queen
传送门 Description 给你一个n*m的棋盘,在棋盘上放置一黑一白两个皇后,求两个皇后能够互相攻击的方案个数 Input 多组数据,每组数据包括: 一行,为n和m 输入结束标志为n=m=0. ...
- 分别利用并查集,DFS和BFS方法求联通块的数量
联通块是指给定n个点,输入a,b(1<=a,b<=n),然后将a,b连接,凡是连接在一起的所有数就是一个联通块: 题意:第一行输入n,m,分别表示有n个数,有输入m对连接点,以下将要输入m ...
- pc扫码支付
https://www.cnblogs.com/shengyu-kmust/p/5228261.html https://pay.weixin.qq.com/wiki/doc/api/native.p ...
- git设置不需要密码
https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速 设置记住密码(默认15分钟): git config --global credenti ...
- JavaMail实现邮件的发送
1,拷贝mail.jar 和activation.jar到项目中 2,开启邮箱的 POP3/SMTP服务,以QQ邮箱为例 进去QQ邮箱-->设置-->账号-->进行设置如下图 注意: ...
- 数学:Burnside引理与Pólya定理
这个计数定理在考虑对称的计数中非常有用 先给出这个定理的描述,虽然看不太懂: 在一个置换群G={a1,a2,a3……ak}中,把每个置换都写成不相交循环的乘积. 设C1(ak)是在置换ak的作用下不动 ...
- PowerDesigner16连接mysql5.6逆向生成PDM
一:首先安装ODBC驱动 https://dev.mysql.com/downloads/connector/odbc/ ,安装32位驱动 二:然后配置好ODBC数据源,控制面板\系统和安全\管理 ...
- 【51NOD-0】1008 N的阶乘 mod P
[算法]简单数学 [题解]多项式展开:(a*b)%p=(a%p*b%p)%p #include<cstdio> #include<algorithm> #define rep( ...
- Spring中获取request的几种方法,及其线程安全性分析(山东数漫江湖)
前言 本文将介绍在Spring MVC开发的web系统中,获取request对象的几种方法,并讨论其线程安全性. 原创不易,如果觉得文章对你有帮助,欢迎点赞.评论.文章有疏漏之处,欢迎批评指正. 欢迎 ...
- Everything Has Changed(HDU6354+圆交+求周长)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6354 题目: 题意:用一堆圆来切割一个圆心为原点,半径为R的圆A,问切割完毕后圆A外围剩余部分的周长( ...