博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-寻找最大值 递推求连续区间
阅读量:5281 次
发布时间:2019-06-14

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

通过枚举每个点作为最小值,再通过动态规划求出以每个点作为最小值的左右区间。

代码如下:

#include 
#include
#include
#include
#define MAXN 100005using namespace std;typedef long long int Int64;Int64 seq[MAXN], sum[MAXN], ret;int L[MAXN], R[MAXN], N;int main(){ while (scanf("%d", &N) == 1) { ret = -(1LL << 60); for (int i = 1; i <= N; ++i) { scanf("%I64d", &seq[i]); sum[i] = sum[i-1] + seq[i]; } for (int i = 1; i <= N; ++i) { int len = 0, j = i - 1; while (j >= 1) { if (seq[j] < seq[i]) break; len += L[j] + 1; j = i - len - 1; } L[i] = len; } for (int i = N; i >= 1; --i) { int len = 0, j = i + 1; while (j <= N) { if (seq[j] < seq[i]) break; len += R[j] + 1; j = i + len + 1; } R[i] = len; } for (int i = 1; i <= N; ++i) { ret = max(ret, (sum[i+R[i]]-sum[i-L[i]-1]) * seq[i]); } printf("%I64d\n", ret); } return 0; }

转载于:https://www.cnblogs.com/Lyush/archive/2012/08/17/2643616.html

你可能感兴趣的文章
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
国外常见互联网盈利创新模式
查看>>
android:scaleType属性
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Linux中防火墙centos
查看>>
[JS]递归对象或数组
查看>>
linux sed命令
查看>>
程序存储问题
查看>>
优雅地书写回调——Promise
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
寄Android开发Gradle你需要知道的知识
查看>>