JZOJ 6305.最小值【思维】【dp】
...
- 题目:
- 题意:
- 分析:
- 代码:
题目:
传送门
题意:
在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】相关推荐
- 【DP专题】——jzoj 6305. 最小值
dp+单调栈 6305. 最小值 (File IO): input:min.in output:min.out Time Limits: 1000 ms Memory Limits: 131072 ...
- JZOJ 6305. 最小值
DescriptionDescriptionDescription 给定一个长度为nnn的序列,对于一个区间[l,r][l,r][l,r]定义它的贡献为区间最小值的三次函数f(x)=Ax3+Bx2+C ...
- [jzoj 6305] 最小值 {单调栈}
题目 解题思路 g[i]g[i]g[i]表示1到n已经划分完毕的最大价值和. O(n2)O(n^2)O(n2)方程很容易想到. 我们可以用单调栈来维护. 代码 #include<cstdio&g ...
- Jzoj P6305 最小值___单调栈优化dp
题目大意: 分析: 设dpidp_idpi表示分割了前i个,最大能得到的价值 初值:dpi=f(mini=1iai)dp_{i}=f(min_{i=1}^{i}a_i)dpi=f(mini=1i ...
- CodeForces - 1353E K-periodic Garland(思维+dp)
题目链接:点击查看 题目大意:给出 n 个灯泡以及其初始状态(开或关),每次操作可以将任意一个灯泡的状态置反,问最少需要操作多少次,可以使得所有开着的灯泡之间相距 k 个单位 题目分析:因为需要满足所 ...
- D.Digits 思维dp 取log乘积变成加法
题目链接 题目大意: 就是给你nnn个数和一个数字ddd,问你从这n个数中挑出若干个数,使得这些数的乘积最后的一个数字是d,并且结果是最大的,问你要挑出哪些数字? n∈[1,1e5],ai∈[1,10 ...
- atcoder 2017Code festival C ——D题 Yet Another Palindrome Partitioning(思维+dp)
题目大意: 把一个字符串s分割成m个串,这m个串满足至多有一种字符出现次数为奇数次,其他均为偶数次,问m的最小值 题解: 首先我们想一下纯暴力怎么做 显然是可以n^2暴力的,然后dp[i]表示分割到i ...
- E. Sergey and Subway(思维 + dp)
Problem - E - Codeforces Sergey Semyonovich 是 N 市县的市长,他一直在思考如何进一步改善 Nkers 的生活.不幸的是,几乎所有可以做的事情都已经完成了, ...
- 思维dp ---- Codeforces Round #142 (Div. 1) D. Towers
题目链接 题目大意: 你可以把第iii座塔和i+1i+1i+1座或i−1i-1i−1座合并成一个 使得到的那座塔的高度是原来两座塔的和 问最使序列变成严格不增最小合并次数 解题思路: 首先我想到的是贪 ...
最新文章
- SAP PM 入门系列7 - 常用Function Modules
- python新手入门讲解-这是大多数新手入门之后强烈推荐的python自学入门指南秘笈...
- 谈一谈CMU导师和学生的互动方式
- C# WinForm开发系列 - WebBrowser
- Spring实战第七章
- 应用程序服务器迁移:从JBoss EE5到Wildfly EE7
- uboot源码——主Makefile分析
- [人生百态]爱的样子
- 被高中生物骗了这么多年,原来人体内细胞的DNA是有不同的?
- 100g光模块厂家排名_100G光模块固件设计示例
- 引领Boost(二)(Boost::Any)
- Linux网络属性及其配置
- 数据集:mnist手写数据集
- Bean的装配方式之xml装配--(超详细,适合小白入门)
- Linux系统编程:入门篇视频教程-王利涛-专题视频课程
- 富勒wms系统里的定时器id_「案例」全面升级的康缘药业物流系统
- 施密特触发器——用于正弦波转方波、脉冲波整形
- 国产免费虚拟化OVM与 OpenStack对比
- 跑步到底伤不伤膝盖?励建安教授给你权威解答
- UIPATH 浏览器在新标签页中执行操作
热门文章
- Simplify and Robustify Negative Sampling for Implicit Collaborative Filtering (Nips‘20) 论文小结
- python学习笔记连载
- 别着急开发APP,先带你了解现在的APP开发市场
- ClickHouse使用实践与规范
- 《Python程序设计(第3版)》[美] 约翰·策勒(John Zelle) 第 5 章 答案
- RC4原理及其Python的实现
- 【Unity3D】血条(HP)
- linux 谷歌浏览器设置代理_浏览器自带代理服务器配置脚本
- 谷歌浏览器代理服务器有问题
- Python基础数据类型详解:字典(补充)