可以算出以第i个值为高度的矩形可以向左延伸left[i],向右延伸right[i]的长度

那么答案便是 (left[i] + right[i] + 1) * a[i] 的最大值

关键left[i] 和right[i]的计算

如果a[i] > a[i-1]  ,  那么left[i] = 0

如果a[i] <=a[i-1],  那么left[i] = left[i-1] + 1,   但是位置i-1-left[i-1]-1及其往左的元素没有比较过,所以需要继续去比较

同理right[i]的计算也是一样的

 #pragma warning(disable:4996)
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <vector>
#include <bitset>
#include <algorithm>
#include <iostream>
#include <string>
#include <functional>
#include <unordered_map>
typedef __int64 LL;
const int INF = ; const int N = + ;
int a[N];
LL left[N], right[N];
int main()
{
int n;
while (scanf("%d", &n), n)
{
for (int i = ;i <= n;++i)
{
scanf("%d", &a[i]);
}
left[] = right[n] = ;
int l,r;
for (int i = ;i <= n;++i)
{
l = i - ;
left[i] = ;
while (l>= && a[i] <= a[l])
{
left[i] += left[l] + ;
l = l - left[l] - ;
}
}
for (int i = n - ;i >= ;--i)
{
right[i] = ;
r = i + ;
while (r <= n && a[i] <= a[r])
{
right[i] += right[r] + ;
r = r + right[r] + ;
}
}
LL ans = ;
for (int i = ;i <= n;++i)
{
ans = std::max(ans, (left[i] + right[i] + )*a[i]);
}
printf("%I64d\n", ans);
}
return ;
}

hdu1506(dp减少重复计算)的更多相关文章

  1. Random获得的随机数怎么样减少重复率

    C#中的Random在获得随机数的时,如果你想要随机循环取得100个随机数则使用如下代码会出现大量的重复数字.代码如下: using System; namespace ConsoleApplicat ...

  2. 编写高质量代码改善C#程序的157个建议——建议98:用params减少重复参数

    建议98:用params减少重复参数 如果方法的参数数目不定,且参数类型一致,则可以使用params关键字减少重复参数声明. void Method1(string str, object a){} ...

  3. Light libraries是一组通用的C基础库,目标是为减少重复造轮子而写(全部用POSIX C实现)

    Light libraries是一组通用的C基础库,目标是为减少重复造轮子而写实现了日志.原子操作.哈希字典.红黑树.动态库加载.线程.锁操作.配置文件.os适配层.事件驱动.工作队列.RPC.IPC ...

  4. sql联合查询去除重复计算总和

    1.首先来个联合查询 SELECT 字段1, 字段2, 字段3, 字段4 FROM 表1 INNER JOIN 表2 ON 表1.字段x = 表2.字段x x:代表随意的一个,只要在联合查询的两张表都 ...

  5. 运算程序,计算玩判断,Y继续,重复计算,N结束

    #include "stdio.h" void main() { /*定义变量,d1,d2:第一.二个数 fu:符号 p1:接收判断号Y/N p2:接收的p1赋给p1 */ int ...

  6. BZOJ 2726: [SDOI2012]任务安排 [斜率优化DP 二分 提前计算代价]

    2726: [SDOI2012]任务安排 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 868  Solved: 236[Submit][Status ...

  7. 动态生成简约MVC请求接口|抛弃一切注解减少重复劳动吧

    背景 目前创建一个后端请求接口给别人提供服务,无论是使用SpringMVC方式注解,还是使用SpringCloud的Feign注解,都是需要填写好@RequestMap.@Controller.@Pa ...

  8. hdu1506 dp

    //Accepted 1428 KB 62 ms // #include <cstdio> #include <cstring> #include <iostream&g ...

  9. ANDROID_MARS学习笔记_S01_004dpi、dp(dip)及计算

    一.dpi.dp介绍 sp会随着用户在手机中设置字体大小而改变,而dp不会 二.1.dpsp_layout.xml <?xml version="1.0" encoding= ...

随机推荐

  1. Python 生成的页面中文乱码问题

    第一 保证 程序源文件里的中文的编码格式,如我们把 源文件的编码设置成utf8的. reload(sys) sys.setdefaultencoding('utf-8') 第二, 告诉浏览器,我们须要 ...

  2. 介绍SAP预留函数创建搜索帮助

    紧接上一节介绍的SAP预定义的出口函数F4IF_SHLP_EXIT_EXAMPLE创建搜索帮助, 该函数主要有两个部分: Changing接口的参数属性如下: SHLP:搜索帮助的基础描述,包括搜索帮 ...

  3. FairScheduler的任务调度机制——assignTasks

    首先需要了解FairScheduler是如何在各个Pool之间分配资源,以及每个Pool如何在Job之间分配资源的.FairScheduler的分配资源发生在update()方法中,而该方法由一个线程 ...

  4. Android菜鸟的成长笔记(4)——你真的理解了吗?

    原文:Android菜鸟的成长笔记(4)--你真的理解了吗? 在上一篇中我们查看了QQ的apk源文件中的布局结构,并仿照QQ完成了我们第一个应用的界面,详细请看<Android菜鸟的成长笔记&g ...

  5. HTML5动态分页效果代码

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Database Connection Pool Library | Libzdb

    Database Connection Pool Library | Libzdb A small, easy to use Open Source Database Connection Pool ...

  7. MySQL内存表的特性与使用介绍 -- 简明现代魔法

    MySQL内存表的特性与使用介绍 -- 简明现代魔法 MySQL内存表的特性与使用介绍

  8. Swift - 访问控制(private,internal,public)

    在Swift语言中,访问修饰符有三种,分别为private,internal和public.同时,Swift对于访问权限的控制,不是基于类的,而是基于文件的.其区别如下: 1,private priv ...

  9. BT5 firefox Flash插件问题

    今天在BT下安装了Nessus,好不容易安装好了,注册成功,本以为大功告成,但是在最后关头,却出现一个“未安装flash插件”错误,在bT下尝试着安装flahs插件,蛋碎一地,,,没能解决. 我的BT ...

  10. Storyboard 经常用法总结-精华版

    1.prepareForSegue: Now we know what the destinationViewController is we can set its data properties. ...