地址 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# 集合汇总

    using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...

  2. SpringMVC框架之第二篇

    6.参数绑定(重点) Springmvc作为表现层框架,是连接页面和service层的桥梁,它负责所有请求的中转.怎么从请求中接收参数是重点,这也体现了我们刚开始说的Springmvc的第一个作用:“ ...

  3. 深入理解JavaScript程序设计

    今天没事情回顾了一下我在去年4-6月份学习JavaScript程序设计的笔记.发现书到用时方恨少,感觉自己学的还不够深,准备抽时间啃一下<JavaScript高级程序设计>,同时深入了解一 ...

  4. 集合 set方法

    集合 number = {1, 2, 4} # 添加元素到集合 number.add(100) print(number) # 从集合中删除 number.remove(2) print(number ...

  5. MySQL数据库~~~~~查询行(文件的内容)

    1. 单表查询 语法 select distinct 字段 from 库名.表名 where 条件 group by 字段 # 分组 having 筛选 # 过滤 order by 字段 # 排序 l ...

  6. spring+cxf No bean named 'cxf' available

    最近项目中需要用到webservice,在spring中集成cxf时一直报错: 严重: StandardWrapper.Throwable org.springframework.beans.fact ...

  7. Nginx:反向代理

    与众不同的生活方式很累人呢,因为找不到借口     在上一章节中,我们以及了解到正向.反向代理.负载均衡和动静分离的基本概念,安装教程,而在本节中将会了解到在 本文要点: 1.理清概念 2.Linux ...

  8. MAC下安装pomelo

    配置:OS X 10.9.4 + Xcode 6.0 摘要:本文目标为成功运行pomelo的HelloWorld程序.   壹.| 安装必要项   一.安装Xcode及相关工具 1.安装Xcode. ...

  9. 关于Git和GitHub的一些知识

    git是分布式的版本控制工具,可离线,svn是集中式的,要联网操作.集中式的所有数据都放在服务器端,如果服务器宕机,则历史记录也可能就丢失了,这叫做单点故障.分布式的数据可直接保存在客户端. 为何要版 ...

  10. shell中字典的一个用法示例

    1. shell中字典的用法示例, 数组用法同字典 2. 以上使用sell配合字典实现的功能, 使用awk能轻松搞定, 如下: awk '{print $2}' file.txt | sort | u ...