...

  • 题目:
  • 题意:
  • 分析:
  • 代码:

题目:

传送门


题意:

在nnn个数中分出若干个区间使得区间的价值总和最大


分析:

在新加入一个数时,我们能够产生影响的范围是最近一个比自己小的那个数,所以我们用一个单调栈来维护每个数的那个数
设fif_ifi​表示做到iii时最优解,加入一个数时,我们有两种选择,一个是自己将比自己大的数都合并在一起,整个区间的答案就是自己,另一种则是选择默默无名,乖乖的加入一个有比自己小的区间内
对于第一个选择,我们如何确定最优解时到底是如何安排区间的呢
我们之前的fff都已经确定了,因为fff保存的就是iii之前的最优安排方案,所以我们取max{f}max\{f\}max{f},而在这个最优安排下可能会存在没有被放入其他区间的数,那就跟当前这个数一起作为一个新区间,然后价值就带入到公式里计算就好了
因为我们覆盖过的数是已经确定的,从而每个数都只会被覆盖一次,这样就是O(n)O(n)O(n)的优秀复杂度


代码:

#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
#include<vector>
#define LZX Mu
#define LL long long
using namespace std;
inline LL read() {LL d=0,f=1;char s=getchar();while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}return d*f;
}
LL n,a,b,c,d;
LL get(LL x) {return a*x*x*x+b*x*x+c*x+d;}
struct node{LL maxf,id,ans;
}s[200005];
LL x[200005],len=0,f[200005];
int main()
{freopen("min.in","r",stdin);freopen("min.out","w",stdout);n=read(),a=read(),b=read(),c=read(),d=read();for(LL i=1;i<=n;i++) x[i]=read();for(LL i=1;i<=n;i++){LL w=f[i-1];while(len&&x[s[len].id]>=x[i]) w=max(w,s[len].maxf),len--;s[++len].maxf=w;s[len].id=i;if(len>1) s[len].ans=max(w+get(x[i]),s[len-1].ans);else s[len].ans=w+get(x[i]);f[i]=s[len].ans;}cout<<f[n];return 0;
}

JZOJ 6305.最小值【思维】【dp】相关推荐

  1. 【DP专题】——jzoj 6305. 最小值

    dp+单调栈 6305. 最小值  (File IO): input:min.in output:min.out Time Limits: 1000 ms  Memory Limits: 131072 ...

  2. JZOJ 6305. 最小值

    DescriptionDescriptionDescription 给定一个长度为nnn的序列,对于一个区间[l,r][l,r][l,r]定义它的贡献为区间最小值的三次函数f(x)=Ax3+Bx2+C ...

  3. [jzoj 6305] 最小值 {单调栈}

    题目 解题思路 g[i]g[i]g[i]表示1到n已经划分完毕的最大价值和. O(n2)O(n^2)O(n2)方程很容易想到. 我们可以用单调栈来维护. 代码 #include<cstdio&g ...

  4. Jzoj P6305 最小值___单调栈优化dp

    题目大意: 分析: 设dpidp_idpi​表示分割了前i个,最大能得到的价值 初值:dpi=f(mini=1iai)dp_{i}=f(min_{i=1}^{i}a_i)dpi​=f(mini=1i​ ...

  5. CodeForces - 1353E K-periodic Garland(思维+dp)

    题目链接:点击查看 题目大意:给出 n 个灯泡以及其初始状态(开或关),每次操作可以将任意一个灯泡的状态置反,问最少需要操作多少次,可以使得所有开着的灯泡之间相距 k 个单位 题目分析:因为需要满足所 ...

  6. D.Digits 思维dp 取log乘积变成加法

    题目链接 题目大意: 就是给你nnn个数和一个数字ddd,问你从这n个数中挑出若干个数,使得这些数的乘积最后的一个数字是d,并且结果是最大的,问你要挑出哪些数字? n∈[1,1e5],ai∈[1,10 ...

  7. atcoder 2017Code festival C ——D题 Yet Another Palindrome Partitioning(思维+dp)

    题目大意: 把一个字符串s分割成m个串,这m个串满足至多有一种字符出现次数为奇数次,其他均为偶数次,问m的最小值 题解: 首先我们想一下纯暴力怎么做 显然是可以n^2暴力的,然后dp[i]表示分割到i ...

  8. E. Sergey and Subway(思维 + dp)

    Problem - E - Codeforces Sergey Semyonovich 是 N 市县的市长,他一直在思考如何进一步改善 Nkers 的生活.不幸的是,几乎所有可以做的事情都已经完成了, ...

  9. 思维dp ---- Codeforces Round #142 (Div. 1) D. Towers

    题目链接 题目大意: 你可以把第iii座塔和i+1i+1i+1座或i−1i-1i−1座合并成一个 使得到的那座塔的高度是原来两座塔的和 问最使序列变成严格不增最小合并次数 解题思路: 首先我想到的是贪 ...

最新文章

  1. SAP PM 入门系列7 - 常用Function Modules
  2. python新手入门讲解-这是大多数新手入门之后强烈推荐的python自学入门指南秘笈...
  3. 谈一谈CMU导师和学生的互动方式
  4. C# WinForm开发系列 - WebBrowser
  5. Spring实战第七章
  6. 应用程序服务器迁移:从JBoss EE5到Wildfly EE7
  7. uboot源码——主Makefile分析
  8. [人生百态]爱的样子
  9. 被高中生物骗了这么多年,原来人体内细胞的DNA是有不同的?
  10. 100g光模块厂家排名_100G光模块固件设计示例
  11. 引领Boost(二)(Boost::Any)
  12. Linux网络属性及其配置
  13. 数据集:mnist手写数据集
  14. Bean的装配方式之xml装配--(超详细,适合小白入门)
  15. Linux系统编程:入门篇视频教程-王利涛-专题视频课程
  16. 富勒wms系统里的定时器id_「案例」全面升级的康缘药业物流系统
  17. 施密特触发器——用于正弦波转方波、脉冲波整形
  18. 国产免费虚拟化OVM与 OpenStack对比
  19. 跑步到底伤不伤膝盖?励建安教授给你权威解答
  20. UIPATH 浏览器在新标签页中执行操作

热门文章

  1. Simplify and Robustify Negative Sampling for Implicit Collaborative Filtering (Nips‘20) 论文小结
  2. python学习笔记连载
  3. 别着急开发APP,先带你了解现在的APP开发市场
  4. ClickHouse使用实践与规范
  5. 《Python程序设计(第3版)》[美] 约翰·策勒(John Zelle) 第 5 章 答案
  6. RC4原理及其Python的实现
  7. 【Unity3D】血条(HP)
  8. linux 谷歌浏览器设置代理_浏览器自带代理服务器配置脚本
  9. 谷歌浏览器代理服务器有问题
  10. Python基础数据类型详解:字典(补充)