HDU 1505 City Game

hdu1505 City Game二维01矩阵求最大矩形周长 City Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2837    Accepted Submission(s): 1142 Problem Description Bob is a strategy ga 阅读详情

传送门

直方图dp二维版本。
给你一个N*M的网格,每个格子有两种状态(R,F),让你在其中找一个面积最大的全部由F组成的矩形。

思路就是把每一行都当作每次直方图dp的底边,执行N次直方图dp,取最大值。
某一行某一列的柱子的高度可以看成从当前网格出发向上,碰到第一个R为止(不包括),有几个连续的F(包括自己)。若当前网格就是R,那么当前柱子高度就是0。

网格是一行行输入的,若当前行当前列是F,那么具体的高度值可以由上一行当前列的值传递下来。

最后,这个题的输入很烦,是一个字符矩阵,每读取一个字符都要考虑这个字符之前有没有换行和空格。可以看出每行行首的字符前都会有一个换行,每行非行首的字符前都会有一个空格。代码中有两种读取形式,一种AC一种WA。我并不知道为什么。


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <queue>
using namespace std;                           // 直方图dp二维版

const int MAXN = 1001;
int M, N, T;
int g[MAXN][MAXN];                             // 表示第i行第j列的元素向上数有几个连续的F(包括自己,碰到第一个R为止)
int l[MAXN], r[MAXN];
int ans;

void init()
{
	for (int i = 1; i <= M; i++)               // 第1行i-1=0,用到了第0行的临界数据
		g[0][i] = 0;
	ans = -1;
}

int main()
{
	char c;
	scanf("%d", &T);
	for (; T--;)
	{
		scanf("%d%d", &N, &M);
		init();
		for (int i = 1; i <= N; i++)
		{
			for (int j = 1; j <= M; j++)
			{
				if (j == 1) scanf("\n%c", &c);
				else scanf(" %c", &c);                 // 这样写就AC

				//getchar();
				//scanf("%c", &c);                     // 这样就WA,我就想问,这两种有什么区别?

				if (c == 'R') g[i][j] = 0;
				else g[i][j] = g[i - 1][j] + 1;        // 可以从上往下传递,上一行的当前位置是R(0)就说明要从本行算起
			}
		}

		for (int i = 1; i <= N; i++)                   // 每一行可看成一个直方图dp
		{
			int t;
			l[1] = 1;
			for (int j = 2; j <= M; j++)
			{
				for (t = j; t - 1 >= 1 && g[i][t - 1] >= g[i][j]; t = l[t - 1]);
				l[j] = t;
			}
			r[M] = M;
			for (int j = M - 1; j >= 1; j--)
			{
				for (t = j; t + 1 <= M && g[i][t + 1] >= g[i][j]; t = r[t + 1]);
				r[j] = t;
			}
			for (int j = 1; j <= M; j++)
			{
				ans = max(ans, g[i][j] * (r[j] - l[j] + 1));   // 即使全是R,但因为高度都是0,所以直接把初始的-1覆盖掉了
			}
		}
		printf("%d\n", ans * 3);
	}

	return 0;
}
Visual C++与WPF混合开发:C++/CLI桥接技术实现现代化桌面应用 在桌面应用开发领域,混合编程技术是连接不同技术栈、复用核心资产的关键手段。其核心原理在于通过特定的桥接层,实现托管代码与非托管代码之间的互操作,从而打破语言和运行时环境的壁垒。这项技术的核心价值在于,它允许开发者将高性能、高稳定性的原生C++业务逻辑库,与现代化、高表现力的WPF用户界面无缝结合,避免了重写核心代码的巨大成本和风险。在工业控制、数据可视化、上位机软件等对性能和界面均有高要求的应用场景中,这种架构尤为适用。本文以C++/CLI作为桥接技术,详细演示了如何构建一个包含原生C++核心层、C++/C 阅读详情

相关推荐

Python表白代码:“ 星光月夜烟花皆归你,我也归你”(满天烟花盛开、附番外玫瑰)

导语 "慢品人间烟火色 闲观人间岁月长" ———致自己​​​ ​ ???? 遇见我以后,我们的故事就开始了,愿你历经山河,仍觉得人间值得????。 ​ 星光月夜烟花皆归你,我也归你。关于烟花????大家都​知道多少?有多少表白故事情节都发生在烟 花下,想必木木子????不用说大家也知道叭~​​ 今天这则小短文就是关于烟花的故事!你准备好跟我一起进入烟花的世界了嘛? ​正文 “每一句文案,都有一个故事,你仔细听” ​ 1)环境安装???? 准备好:.

顾木子吖的博客 5万+

HDU 1505 City Game(DP求二维最大子矩阵)

City Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5913    Accepted Submission(s): 2533 Problem Description Bob is a strategy ga

HHH的专栏 445

unet学习笔记(milesial/Pytorch-UNet)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 unet学习笔记(milesial/Pytorch-UNet)原理讲解unet_parts.py内容predict.py内容 所用到的代码Pytorch-UNet/predict.py at master · milesial/Pytorch-UNet ·GitHub 原理讲解 蓝/白色框表示 feature map; 蓝色箭头表示 3x3 卷积,用于特征提取; 灰色箭头表示skip-connection,用于特征融合; 红色箭头.

weixin_67138138的博客 2553

【DP】 hdu1505 City Game

City Game http://acm.hdu.edu.cn/showproblem.php?pid=1505 Problem Description Bob is a strategy game programming specialist. In his new city building game the gaming environment is as foll

Ted's 游乐园 2679

告别串口升级!手把手教你为STM32H750的W25Q32制作MDK下载算法(QSPI篇)

本文详细介绍了为STM32H750的W25Q32制作MDK下载算法(QSPI篇)的完整流程,帮助开发者告别低效的串口烧录方式。通过定制下载算法,可实现20倍以上的烧录速度提升,支持完整的调试功能,显著提高开发效率。文章涵盖环境准备、核心算法实现、性能优化及常见问题解决方案,适合嵌入式开发者参考。

weixin_30735745的博客 403

手把手教你使用ConvNeXt训练自己数据集和推理,ConvNeXt模型训练(CVPR 2022),一个能挑战 Vision Transformer 的卷积神经网络,含完整代码和数据集

手把手教你使用ConvNeXt训练自己数据集和推理,ConvNeXt模型训练(CVPR 2022),一个能挑战 Vision Transformer 的卷积神经网络,含完整代码和数据集

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1449

HDU-1505-City Game【dp】【思维】

HDU-1505-City Game

Linoy 1186

海康visionmaster-渲染结果:通过绑定流程或模块获取 渲染结果的方法

海康visionmaster-渲染结果:通过绑定流程或模块获取 渲染结果的方法

视觉人机器视觉的博客 2638

HDU-1505-City Game——算法笔记

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1505 Problem Description: Bob is a strategy game programming specialist. In his new city building game the gaming environment is as follows: a city is b...

学而不思则忘 441

基于YOLOv8与UI界面的短视频内容审核系统实现与深度学习应用

YOLO(You Only Look Once)是一种用于实时物体检测的深度学习模型,它能在单次前向传播中同时完成物体检测和定位。YOLOv8是YOLO系列中的最新版本,相较于之前的版本,YOLOv8具有更高的检测精度和更快的推理速度,特别适合需要实时检测的应用场景。YOLOv8通过卷积神经网络(CNN)来提取图像中的特征,并通过多个卷积层来预测每个目标的位置和类别。该模型的优势在于其端到端的结构,使得在视频监控、自动驾驶、安防监控等实时应用中,能够实现快速且高效的目标检测。

YOLO 314

车载以太网网络测试-27【SOME/IP-SD简述】

SOME/IP-SD协议是基于IP的可扩展面向服务中间件中的服务发现协议,是汽车电子和嵌入式系统中实现动态服务发现与通信的核心组件。该协议规范详细说明了协议SOME/IP服务发现(SOME/IP-SD)的格式、消息序列和语义。本文将对SOME/IP-SD协议进行详细介绍。

车载网络测试工程师的博客 1953

City Game HDU - 1505(单调栈)

City Game HDU - 1505题意:开发商在一块m*n的地皮上建楼房, 一直这块地有空地和已用地, 空地用F表示, 已用地用R表示, 每单位面积的地皮市值3$, 求出这整块地皮上价值最大的一块矩形地皮;HDU 1506 ...

Sirius_han的博客 276

关于DEJA_VU3D - Cesium功能集专栏说明

专栏主要目的是对工作中基于Cesium实现过的功能进行整合,暂时打算一周2-3更的样子来更新,每一篇都会奉上完整源代码(尽可能把代码简洁一些)。功能实现大多数是自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小130个左右的功能,后续也会不断的更新。..........................................

总得学点什么的博客 2万+

hdu 1505 City Game

这道题目说是动态规划,但是感觉上更加靠近求最大矩形那个套路也就是hdu1506那道题目,有时间再刷吧,真的要考试了,不浪了,思路就是遇到一行中连续的1的时候,比如在第i行[s..e]区间中都是1,那么有是s 题目链接:https://vjudge.net/problem/HDU-1505 #include #include #include using namespace std;

算法虐我千百遍 548

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

hdu1505 City Game

hdu1506 加强版  #include <fstream> #include <iostream> #include <string> #include <complex> #include <math.h> #include <set> #include <vector> #include <map> #include <queue> #include <stdio.h> #include

笔记 390

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HDU 1505 City Game -

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1505 #include #include #include #include using namespace std; const int maxn=1000+10; int h[maxn][maxn],l[maxn],r[maxn]; int main() { int T,R,C; cin>>T

BRCOCOLI的博客 246

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

关于扫描线和hdu1505city game解题报告

扫描线是一种优化算法,看了好久才终于明白; 此处通过一道例题讲 hdu 1505City Game 这道题相当于求出F构成最大矩阵的面积,分析数据规模可得最多用时间复杂度为 O(n²),可用单调栈或扫描线方法。 首先我们尝试扫描线; 核心代码如下 for(int j=1;j<=m;j++) { scanf("%s",str); if(str[0]=='F')d[i][j]=d[i-1][j...

dwh1041518282的博客 200

hdu1505 City Game(DP)

思路:HDU1506的加强版,只要把算出以i 行为底能达到的最到的最大高度,再扫描每一行,就转化为 HDU1506 的问题了 #include using namespace std; const int maxn = 1005; int a[maxn][maxn]; int l[maxn],r[maxn]; int main() { int T; scanf("%d",&T);

围巾的ACM博客 284

hdu 1505City 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

城南的花 325

[HDU 1505 City Game] HDU1506加强版

题目链接  http://acm.hdu.edu.cn/showproblem.php?pid=1505 City Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5711    Accepted Submissi

chenningGo的博客 397

HDU 1505 City Game (DP)

http://acm.hdu.edu.cn/showproblem.php?pid=1505 City Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3929    Accepted Submission

fcbruce 812
上一篇: CCF CSP 201312 3.最大的矩形
下一篇: HDU 2870 Largest Submatrix
Crossing over
博客等级 码龄10年 6粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值