地址 https://algospot.com/judge/problem/read/FENCE

开始考虑暴力遍历

 #include <iostream>
#include <string>
#include <vector>
#include <algorithm> using namespace std; int n;
int m; vector<int> h; int func()
{
int ret = ; for (int i = ; i < h.size(); i++) {
int minHeight = h[i];
for (int j = i; j < h.size(); j++) {
minHeight = min(minHeight,h[j]);
ret = max(ret, (j - i + )*minHeight);
}
} return ret;
} int main()
{
cin >> n; while (n--) {
h.clear();
m = ;
cin >> m; for (int i = ; i < m; i++) {
int t;
cin >> t;
h.push_back(t);
} cout << func() << endl;
} return ;
}

后面优化 采取分冶的办法  最大值要么在左边 要么在右边 要么经过左右 三种情况。

左右两种情况采取递归的方式进行计算

穿越分界由左到右的情况则采用以下方法计算:

取中间两块木板 长方形长度为2 高度为两筐木板短的那块,然后向两边扩展,选取左边或者右边较高的那块木板扩展.每次扩展计算面积,记录当前最大面积。最后得到穿越分界由左到右的最大面积

之所以会取较高的木板扩展是因为面积要以最低的高度计算 如果两边扩展不取较高的而是取较低的木板 那么如果扩展的木板低于当前高度 会遗漏一些情况未计算面积 从而产生错误.

代码如下:

 #include <iostream>
#include <string>
#include <vector>
#include <algorithm> using namespace std; int n;
int m;
vector<int> h;
int solve(int left, int right)
{
if (left == right) return h[left];
int mid = (left + right) / ;
int ret = max(solve(left, mid), solve(mid + , right)); int lo = mid, hi = mid + ;
int height = min(h[lo], h[hi]);
ret = max(ret, height * );
while (left < lo || hi < right) {
if (hi < right && (lo == left || h[lo - ] < h[hi + ])) {
++hi;
height = min(height,h[hi]);
}
else {
--lo;
height = min(height,h[lo]);
}
ret = max(ret, height*(hi - lo + ));
}
return ret;
} int main()
{
cin >> n; while (n--) {
h.clear();
m = ;
cin >> m;
for (int i = ; i < m; i++) {
int t;
cin >> t;
h.push_back(t);
} cout << solve( , m-) << endl;
} return ;
}

算法问题实战策略 FENCE的更多相关文章

  1. 算法问题实战策略 PICNIC

    下面是另一道搜索题目的解答过程题目是<算法问题实战策略>中的一题oj地址是韩国网站 连接比较慢 https://algospot.com/judge/problem/read/PICNIC ...

  2. 《算法问题实战策略》-chaper7-穷举法

    关于这一章节<算法实战策略>有一段概述问题,我认为对于编程人员来说非常有价值,故在这里进行如下的摘抄: 构想算法是很艰难的工作.相比大家都经历过,面对复杂的要求只是傻乎乎地盯着显示器,或者 ...

  3. 《算法问题实战策略》-chaper32-网络流

    基本的网络流模型: 在图论这一块初步的应用领域中,两个最常见的关注点,其一时图中的路径长度,也就是我们常说的的最短路径问题,另一个则是所谓的“流问题”. 流问题的基本概念: 首先给出一张图. 其实所谓 ...

  4. 《算法问题实战策略》-chaper13-数值分析

    这一章节主要介绍我们在进行数值分析常用的二分.三分和一个近似求解区间积分的辛普森法. 首先介绍二分. 其实二分的思想很好理解并且笔者在之前的一些文章中也有所渗透,对于二次函数甚至单元高次函数的零点求解 ...

  5. 《算法问题实战策略》——chaper9——动态规划法技巧

    Q1: 数字游戏: 两个人(A.B)用n个整数排成的一排棋盘玩游戏,游戏从A开始,每个人有如下操作: (1)    拿走棋盘最右侧或者最左侧的棋子,被拿走的数字从棋盘中抹掉. (2)    棋盘中还剩 ...

  6. 《算法问题实战策略》-chaper8-动态规划法

    Q1:偶尔在电视上看到一些被称为“神童”的孩子们背诵小数点以后几万位的圆周率.背诵这么长的数字,可利用分割数字的方法.我们用这种方法将数字按照位数不等的大小分割后再背诵. 分割形式如下: 所有数字都相 ...

  7. 《算法问题实战策略》-chaper21-树的实现和遍历

    这一章节开始介绍一个数据结构中的一个基本概念——树. 我们从数据结构的解读来解释树结构的重要性,现实世界的数据除了最基本的线性结构(我们常用队列.数组和链表等结构表征),还有一个重要的特性——层级结构 ...

  8. 算法问题实战策略 QUADTREE

    地址 https://algospot.com/judge/problem/read/QUADTREE 将压缩字符串还原后翻转再次压缩的朴素做法 在数据量庞大的情况下是不可取的 所以需要在压缩的情况下 ...

  9. 算法问题实战策略 DICTIONARY

    地址 https://algospot.com/judge/problem/read/DICTIONARY 解法 构造一个26字母的有向图 判断无回路后 就可以输出判断出来的字符序了 比较各个字母的先 ...

随机推荐

  1. C# copy source directory files with original folder to the destination path

    private static void PathCopyFilesWithOriginalFolder() { ; try { string sourceDir = @"E:\Source& ...

  2. Ocelot网关在.Net Core 的使用

    1.  项目环境 .Net Core 2.2      Ocelot 13.5.2 2. 基本使用 * Nuget 安装 Ocelot , Ocelot.Provider.Polly * 修改 Pro ...

  3. pandas 初识(六)-可视化

    Pandas 在一张图中绘制多条线 import pandas as pd import numpy as npimport matplotlib.pyplot as plt df = pd.Data ...

  4. PHP命令执行漏洞初探

    PHP命令执行漏洞初探 Mirror王宇阳 by PHP 命令执行 PHP提供如下函数用于执行外部应用程序:例如:system().shell_exec().exec().passthru() sys ...

  5. iOS技术博客

    iOS 技术提高 原文 http://blog.devtang.com/2014/07/27/ios-levelup-tips/# 1.阅读博客 美团技术博客 https://tech.meituan ...

  6. Android 程序分析环境搭建-Android 9 -代码下载编译

    Android 9 -代码下载编译 一,翻墙下载: 1.背景: 背景: 现在Android framework 开发的同学,整体在公司里面解一些无关痛痒的bug,对于Android framework ...

  7. 好用的js片段收藏

    1.判断浏览器信息,如果是手机,就跳到手机页面 if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) { wind ...

  8. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU特性那些事(2)- RT1052DVL6性能实测(CoreMark)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的性能. 在前面的文章 i.MXRTyyyy微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2 ...

  9. NetCore的Docker部署

    NetCore的Docker部署 一.NetCore与Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或 ...

  10. 立 Flag

    行动目标 立Flag时间 计划开始时间 开始时间 行动寄语 通关目标 打卡1 打卡2 打卡3 打卡4 打卡5 打卡6 C# 7.0 核心技术指南 2019-11-1 1号 1号 打好C#基础 看完.实 ...