HDU1506(最大子矩阵)

算法合集 | 神奇的笛卡尔树 - HDU 1506 原文地址:https://cs.v8cloud.cn/article.html?blog_id=225         笛卡尔树是一个很有意思的树形结构,因为它同时满足两个性质,从key(key就是索引位置,如下图中9的key为1,3的key为2......)来看,满足二叉搜索树的特性,从value来看,满足堆的性质。           重点参考下图,图片来自维基百科,还算是能够比较形象的... 阅读详情

这里写图片描述

题意:

给定n个长方形,这n个长方形的底边都在一条直线上,然后输入n个长方形的高,问在这组图像中最大长方形的面积。

解题思路:

因为每个长方形的底边长都是1,所以可以用数组的下标表示每一个长方形,我们所需做的就是求出此长方形能向左向右延伸的最大长度LEN,然后LEN*H即为面积。因为输入的长方形多达一亿个,所以不能一个个从头到尾判断。
L[i]代表第i个长方形向左延伸的最大下标,R[i]表示第i个长方形向右延伸的最大下标。
LEN = R[i] - L[i]+1.
状态转移方程:
if(h[i-1] >= h[i]) L[i] = L[i-1];
if(h[i+1] >= h[i]) R[i] = R[i-1];

#include <set>
#include <numeric>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cctype>
#include <string>
#include <sstream>
#include <map>
#include <functional>

using namespace std;

typedef long long LL;
typedef unsigned long long ULL;
#define REP(idx1,num1) for(int idx1=0;idx1<(num1);idx1++)
#define pb push_back
#define empb emplace_back
#define mp make_pair
#define mem(s) memset(s,0,sizeof(s));
const double EPS = 1e-6;
const int maxn = 100000+10; 
//ULL d[maxn];
ULL a[maxn];
ULL l[maxn];
ULL r[maxn];
int main()
{
    std::ios::sync_with_stdio(false);
    int n;
    while(cin >> n && n)
    {
      //  d[0] = 0;
        //dp
        for(int i = 1; i <= n; ++i)
        {
            cin >> a[i];
            l[i] = i;r[i] = i;//初始化
        }
        for(int i = 1; i <= n; ++i)
        {
            ULL t = i;
            while(t > 1 && a[i] <= a[t-1])
                t = l[t-1];
            l[i] = t;
        }
        for(int i = n; i >= 1; --i)
        {
            ULL t = i;
            while(t < n && a[i] <= a[t+1])
                t = r[t+1];
            r[i] = t;
        }
        //dp
        ULL max_d = 0;
        for(int i = 1; i <= n; ++i)
        {
            max_d = max(max_d,a[i]*(r[i] - l[i] + 1));
        }
        cout << max_d << endl;
    }
    return 0;
}
强化学习入门8—深入理解DDPG 本文是强化学习入门系列的第八篇,前面我们讲Actor-Critic时提到了DDPG。DDPG是google DeepMind团队提出的一种用于输出确定性动作的算法,它解决了Actor-Critic 神经网络每次参数更新前后都存在相关性,导致神经网络只能片面的看待问题这一缺点。同时也解决了DQN不能用于连续性动作的缺点。 阅读详情

相关推荐

法兰克仿真软件FANUC CNC Guide v25.0 安装教程及中文设置

下载地址在文末。我们公司用新到一批FANUC 系统的设备,为方便使用就装了一个 FANUC 数控系统仿真软件FANUC CNC Guide v25.0 ,还是最新版不是市面上流传的老版本。模拟学习一下。

hakesashou的博客 1万+

HDU 1506(动态规划)

分析1:对于每个单位矩阵,我们先求出连续比它高的最左边的下标假设为l,然后求出比它高的最右边的下标假设为r,然后矩阵的面积就是(r-l+1)*1;我们从左到 右扫一遍,求出每个点的l保存在l[]数组里,然后从右到左扫一遍,求出每个点的r保存在r[]数组里,最后可以求出最大的矩阵了。 分析2:我们要求最大矩形面积,那么我们应该求每个矩形向两边延伸的最大长度,最坏情况为0(n),必然T

nucshiyilang的博客 389

硬件即代码:用软件工程思维拆解F450无人机装配的模块化设计哲学

本文探讨了如何用软件工程思维重构DJI-F450无人机的模块化设计,将硬件装配提升为可编程系统。通过硬件抽象层、控制系统分层架构和扩展槽位设计模式,展示了无人机装配的模块化哲学,并结合实际案例说明如何优化性能与安全性。

weixin_29294975的博客 386

HDU 1506(单调栈)

题意   给出一个长度为n的序列,这些序列代表每个宽度为1的矩形的高,矩形是按顺序连在一起的,问最大相连面积(高为相连矩形的最小)。 解题思路   对于每个最大连续的矩阵区间,如果它的边界有比他高的矩形,那么高的矩形肯定会被合并进去的,这与假设相违背,则对于每个最大区间,其边界肯定是比相邻矩阵高的大。即找到每个节点的从左(从右)第一个比它小的节点,这样就是当前节点能构成的最大连续矩形...

博学 笃志 切问 近思 1281

TensorRT-LLM环境配置避坑指南:从安装到实战

本文是一份详尽的TensorRT-LLM环境配置避坑指南。文章重点解析了从Python、CUDA、PyTorch版本选择,到解决mpi4py安装这一核心难题的完整流程,并提供了经过验证的稳定版本组合与实战排错方案,帮助开发者高效部署大语言模型推理优化环境。

a0b1c2d3的专栏 983

VisionMaster位置修正功能深度解析:如何让找圆工具自动跟随移动目标?

本文深度解析海康威视VisionMaster平台的位置修正功能,重点介绍如何通过模板匹配与找圆工具的智能联动实现移动目标的动态追踪。文章详细阐述了工业视觉检测中的坐标系同步原理、模板匹配配置技巧及异常处理策略,为工程师提供了一套完整的工业级解决方案。

uu89012的博客 281

HDU1506 Largest Rectangle in a Histogram (单调栈)

题目链接: Largest Rectangle in a Histogram 大致题意 给定一个宽度为nnn的图形, 由nnn个宽度为1, 高度为hih_ihi​的矩形组成. 要求计算出最大矩形的面积. 解题思路 思维 首先我们最终选取出的大矩形高度一定为某个hih_ihi​. 我们考虑到对于完全包含第iii个小矩形而言的答案, 相当于需要在iii左侧找到小于hih_ihi​的点, 则记录iii位置可以向左延伸lil_ili​, 右侧同理记录出rir_iri​. 这样答案为res=max((ri−li−1)

Fau的博客 232

黑猫带你学UFS协议第2篇:UFS相关名词释义

本文依据UFSJEDEC3.1、个人工作经验整理而成,如有错误请留言。文章为个人辛苦整理,付费内容,已加入原创保护,禁止私自转载。文章所在专栏《黑猫带你学UFS协议详解》

黑猫奥利奥的博客 5303

HDU1506_Largest Rectangle in a Histogram

题目大意:给你一个直方图,告诉你各个条形矩形的高度,求基线对齐构成的矩形中面积 最大的矩形的面积对于每一个矩形。面积 = h[i]*(j-k+1),其中j,k是左右边界,h[i]是矩形 的高。并且对于j <= x <= k,h[i] <= h[x]。 本题中,找到左右边界j,k是关键。 利用动态规划的方法,对于位置i,如果左边条形矩形的高度大于它本身,那么左边的左边 界一定也满足位置i的左边界。同理如果右边条形矩形的高度大于它本身,那么右边的右边 界也一定满足位置i的右边界。迭代循环下去。直到找到i的左右边

程序员充电站(itcharge) 3347

Python爬虫实战:使用最新技术爬取新浪新闻首页数据

本文详细介绍了三种爬取新浪新闻首页的技术方案,从简单的requests-html到强大的Playwright,再到分布式Scrapy架构。小规模爬取:requests-html或aiohttp方案需要JavaScript渲染:Playwright方案大规模分布式爬取:Scrapy-Redis方案。

2201_76125261的博客 1243

【nvidia-B200】实际生产报错NVRM: nvAssertFailedNoLog: Assertion failed: pIOVAS != NULL @ io_vaspace.c:601

升级 NVIDIA 驱动到 R545/R550 数据中心版本(解决 IOVA bug,这是性能差的根本原因);重启服务器(清理驱动残留资源,消除日志中的 NVRM 错误);验证 NVLink/PCIe 链路(确保 8 卡互联使用高速链路,而非单卡 PCIe 共享带宽)。完成这 3 步后,ncccl-test的all_reduce带宽应能提升至100GB/s 以上(取决于服务器的 NVLink/NVSwitch 配置),恢复正常性能。

jundao1997的专栏 650

HDU 1506 (DP求最大子矩阵)

Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14750    Accepted Submission(s): 4241 Problem Descripti

HHH的专栏 592

AI智能体丨使用Coze一键生成中式养生视频,39 条作品涨粉 37.9 万!(附保姆级教程)

本文介绍如何利用扣子(Coze)AI智能体工作流高效制作中式养生短视频。该方案通过AI自动生成养生文案、古风插画素材、语音合成和视频剪辑,将传统制作流程从2-3小时缩短至1-2分钟。工作流包含文案创作、音频生成、图片素材制作和视频合成四大模块,采用大模型处理各环节内容,最终输出可直接导入剪映的草稿文件。特别适合希望快速批量制作文化氛围感强、兼具干货与视觉效果的养生内容创作者,效率提升近百倍。

李同学Lino的博客 3027

HDU 2870 最大子矩阵,联系1505, 1506

题目意思:w  x  y  z  可以转化,求最大子矩阵。 思路:枚举后转换为 hdu 1505 hdu 1506 的情况。 可以转化为a的有:w,y, z 可以转化为b的有:w,x, z 可以转换为c的有:x, y, z 所以 a, w,  y, z一组 b, w,  x, z一组 c, x,  y,  z一组 分别dp #include #include using

vsooda的专栏 1002

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【DP求最大子矩阵面积】hdu 1506

求最大子矩阵面积其实就是求每个数左边>=a[i]的下标,右边>=a[i]的下标,然后就会求出面积了! #include #include #include #include #include #include #include #include #include

leolin_的专栏 1090

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

hdu 1505 1506 2870 2830 最大子矩阵面积

题目链接 1505  http://acm.hdu.edu.cn/showproblem.php?pid=1505 1506  http://acm.hdu.edu.cn/showproblem.php?pid=1506 2807  http://acm.hdu.edu.cn/showproblem.php?pid=2870 2830  http://acm.hdu.edu.cn/show...

甦萌的博客 229

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

hdu 1506 最大子矩阵面积

//写动态规划的题目 要把主要问题提炼出来 这里的问题就是求area=(j-k+1)*a[i] 如果找到j k是解决这个题目的关键 这里暴力求肯定是要超时的 这里用dp来优化#include<stdio.h> #include<string.h> __int64 a[100005],dp[100005],l[100005],r[100005]; int m...

diaoqi6581的博客 157

hdu 1505 /hdu 1506(最大子矩阵)

题意都是求最大子矩阵和。 自己用O(n^3)的算法,直接给我无情的TLE (T..> 随后看到了这个位置迭代算法。 left[i] 表示在第i号元素的左边从left[i]至i中, elem[j] >= elem[i] ( left[i] 同理可得,用right[i]表示在

做自己想做的,即使是错的 1241

HDU 1506 DP 最大完全子矩阵

记录每个 #include "stdio.h" int le[100010],ri[100010]; __int64 ans,x,a[100010]; int main() { int n,i; while (scanf("%d",&n)!=EOF) { if (n==0) break; for (i=1;i<=n;i++)

610

hdu1506(dp求最大子矩阵)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506 分析: 对于每个单位矩阵,我们先求出连续比它高的最左边的下标假设为l,然后求出比它高的最右边的下标假设为r,然后矩阵的面积就是(r-l+1)*1; 我们从左到右扫一遍,求出每个点的l保存在l[]数组里,然后从右到左扫一遍,求出每个点的r保存在r[]数组里,最后可以求出最大的矩阵...

weixin_33853827的博客 106

hdu1506求最大子矩阵

题目链接:点击打开链接 看的别人的代码写的:点击打开链接 #include #include #define LL long long using namespace std; const int maxn=1e6+10; LL a[maxn],l[maxn],r[maxn]; int main() { LL n,Max,i,t; while(~scanf("%lld",&n

Alberttttt的博客 303

HDU 1506 dp求最大子矩阵 *

New~ 欢迎参加——计算机学院大学生程序设计竞赛(新生为主) Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14692    Accepted Submi

became_a_wolf的专栏 429

hdu 2870(dp求最大子矩阵)

题意:让你求的是由同一字母组成的最大子矩阵,w可以变成a或者b,x可以变成b或者c,y可以变成a或者c,z可以变成a或者b或者c。 分析:这是hdu 1506、hdu 1505的加强版,具体的分析看我的博客:http://www.cnblogs.com/jiangjing/p/3221423.html 代码实现: #include<stdio.h> #include<...

weixin_30390075的博客 87

hdu 1506 Largest Rectangle in a Histogram(最大子矩阵)

Problem Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different heights. For example, the figur

HJ 722

hdu 1506 求最大子矩阵 简单DP 迭代法

L[i]表示区间[L[i],i  ]内的x均有a[x]>=a[i],且L[i]取最小值。 R[i]表示区间[i, R[i] ]内的x均有a[x]>=a[i],且R[i]取最大值。 就是枚举高度最低的矩形,形成的矩形高度为 该矩形高度,之前预处理 找到最左边界,和右边界。 #include #include #include #include #

便纵有千种风情 535

hdu 1506(dp求最大子矩阵)

点击打开链接面积=长*宽dp递推

为AC千千万万遍 349
上一篇: HDU1213基础并查集
下一篇: Uva1395 Slim Span(最小生成树)
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值