博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1506
阅读量:4452 次
发布时间:2019-06-07

本文共 1473 字,大约阅读时间需要 4 分钟。

对于每一个直方块,只要能知道以它的高度往左(往右)最大能走多少,再枚举一遍所有的直方块即可。而往左(往右)最大能走多少可以用动态规划的方法实现,开数组left(right),对于每一个方块,初始left[i](right[i])为i,然后用迭代的方法往左(右)看,即可求出。思路想出来了,代码就很简单了。

/*  * hdu1506/win.cpp  * Created on: 2011-10-1  * Author    : ben */ #include 
#include
#include
#include
#include
using namespace std; const int MAXN = 100010; int height[MAXN], left[MAXN], right[MAXN]; void work(); int main() {
#ifndef ONLINE_JUDGE freopen("data.in", "r", stdin); #endif work(); return 0; } void work() {
int N; long long ans, temp; height[0] = -1; while (scanf("%d", &N) == 1 && N > 0) {
for (int i = 1; i <= N; i++) {
scanf("%d", &height[i]); left[i] = i; right[i] = i; } height[N + 1] = -0x7fffffff; for (int i = 1; i <= N; i++) {
while (height[left[i] - 1] >= height[i]) {
left[i] = left[left[i] - 1]; } } for (int i = N; i >= 1; i--) {
while (height[right[i] + 1] >= height[i]) {
right[i] = right[right[i] + 1]; } } ans = -1; for (int i = 1; i <= N; i++) {
temp = right[i] - left[i] + 1; temp *= height[i]; if (temp > ans) {
ans = temp; } } printf("%I64d\n", ans); } }

转载于:https://www.cnblogs.com/moonbay/archive/2011/10/01/2197091.html

你可能感兴趣的文章
亲测可用,解决端口被占用的指令!!
查看>>
MySQL--视图、触发器、事务、存储过程、内置函数、流程控制、索引
查看>>
Django--登录功能
查看>>
GitHub and Git
查看>>
Django--数据库查询操作
查看>>
自定义配置文件的使用
查看>>
js-20170609-运算符
查看>>
ALV弹出窗口&nbsp;&nbsp;&nbsp;REU…
查看>>
算法笔记_065:分治法求逆序对(Java)
查看>>
CSS中关于字体大小的定义 em px rem pt %
查看>>
MSP430FLASH小结
查看>>
STM32 ADC转换时间
查看>>
kylin cube 构建过程
查看>>
结合实际业务场景聊一聊MVP模式的应用
查看>>
我爱 哐 哐 哐,我是哐人类!-【废话区】
查看>>
WinPE启动U盘的制作方法与软件下载(通用PE工具箱/老毛桃/大白菜WinPE)(转载)...
查看>>
行为型设计模式之5--中介者模式
查看>>
Android DevArt6:Android中IPC的六种方式
查看>>
oracle练习题
查看>>
PMP学习感想
查看>>