笔记-[JSOI2011]柠檬
笔记-[JSOI2011]柠檬
\(f_i\) 表示到第 \(i\) 只贝壳最多可以换得的柠檬数。
令 \(c_i=\sum_{h=1}^i[s_h=s_i]\)。
f_i=&\max\{f_{j-1}+s_i(c_i-c_j+1)^2\}(s_i=s_j,j\le i)\\\\
f_i=&f_{j-1}+s_i(c_i^2+c_j^2+1-2c_ic_j+2c_i-2c_j)\\\\
f_i=&f_{j-1}+s_ic_i^2+s_ic_j^2+s_i-2s_ic_ic_j+2s_ic_i-2s_ic_j\\\\
f_{j-1}+s_jc_j^2-2s_jc_j=&2s_ic_ic_j+f_i-s_ic_i^2-2s_ic_i-s_i\\\\
\end{split}
\\
\therefore
\begin{cases}
y=f_{j-1}+s_jc_j^2-2s_jc_j\\
k=2s_ic_i\\
x=c_j\\
b=f_i-s_ic_i^2-2s_ic_i-s_i\\
\end{cases}
\\
\Huge y=kx+b
\]
搞定。
Code
#include <bits/stdc++.h>
using namespace std;
//Start
#define re register
#define il inline
#define mk make_pair
#define pb push_back
#define db double
#define lng long long
#define fi first
#define se second
const int inf=0x3f3f3f3f;
const lng INF=0x3f3f3f3f3f3f3f3f;
//Data
const int N=10000;
int n;
vector<int> s,cnt(N+7),c;
vector<lng> f;
//DP
template<typename T>il T p2(re T x){return x*x;}
il db X(re int j){return c[j];}
il db Y(re int j){return f[j-1]+p2((lng)c[j])*s[j]-(lng)2*c[j]*s[j];}
il db slope(re int k,re int t){return (Y(t)-Y(k))/(X(t)-X(k));}
il lng F(re int i,re int j){return f[j-1]+p2((lng)c[i]-c[j]+1)*s[i];}
vector<int> que[N+7];
#define q que[R]
#define r que[R][0]
il lng DP(){
f.pb(0);
for(re int R=1;R<=N;R++) q=vector<int>(cnt[R]+7);
for(re int i=1,R=s[i];i<=n;R=s[++i]){
while(r>=2&&slope(q[r-1],i)>=slope(q[r-1],q[r])) r--; q[++r]=i;
while(r>=2&&F(i,q[r])<=F(i,q[r-1])) r--; f.pb(F(i,q[r]));
}
return f[n];
}
//Main
int main(){
scanf("%d",&n),s.pb(0),c.pb(0);
for(re int i=1,x;i<=n;i++) scanf("%d",&x),s.pb(x),c.pb(++cnt[x]);
printf("%lld\n",DP());
return 0;
}
\]
笔记-[JSOI2011]柠檬的更多相关文章
- bzoj4709: [Jsoi2011]柠檬 斜率优化
题目链接 bzoj4709: [Jsoi2011]柠檬 题解 斜率优化 设 \(f[i]\) 表示前 \(i\)个数分成若干段的最大总价值. 对于分成的每一段,左端点的数.右端点的数.选择的数一定是相 ...
- 4709: [Jsoi2011]柠檬
4709: [Jsoi2011]柠檬 https://www.lydsy.com/JudgeOnline/problem.php?id=4709 分析: 决策单调性+栈+二分. 首先挖掘性质:每个段选 ...
- 【BZOJ】4709: [Jsoi2011]柠檬
4709: [Jsoi2011]柠檬 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 779 Solved: 310[Submit][Status][ ...
- 【BZOJ4709】[Jsoi2011]柠檬 斜率优化+单调栈
[BZOJ4709][Jsoi2011]柠檬 Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,0 ...
- 【LG5504】[JSOI2011]柠檬
[LG5504][JSOI2011]柠檬 题面 洛谷 题解 考虑\(dp\),令\(f_i\)表示\(dp\)到第\(i\)位且在第\(i\)位分段的最大值. 我们令题面中的\(s_i\)为\(a_i ...
- bzoj4709 [jsoi2011]柠檬
Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们 ...
- 【bzoj4709】[Jsoi2011]柠檬 斜率优化
题目描述 给你一个长度为 $n$ 的序列,将其分成若干段,每段选择一个数,获得 $这个数\times 它在这段出现次数的平方$ 的价值.求最大总价值. $n\le 10^5$ . 输入 第 1 行:一 ...
- BZOJ4709 Jsoi2011 柠檬【决策单调性+单调栈】
Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从 ...
- bzoj 4709: [Jsoi2011]柠檬
Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从 ...
随机推荐
- 【java从入门到精通】day-06-基本运算符-自增自减运算符
1.运算符 java语言支持如下运算符: 算术运算符:+,-,*,/,%,++,-- 赋值运算符:= 关系运算符:>,<,>=,<=,==,!=,instanceof 逻辑运算 ...
- 七:Redis的持久化
1.RDB(Redis DataBase) 1.1 定义:在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的snapshot快照,他恢复时是将快照文件直接读到内存里 是什么:Redis会单 ...
- oracle的三种连接方式
1.通过sid jdbc:oracle:thin:@host:port:SID Example: jdbc:oracle:thin:@localhost:1521:sid_test 2.通过servi ...
- echarts折线图,数据切换时(最近七天)绘图不合理现象
echarts折线图,当进行数据切换时存在绘制不合理的问题,数据没错,但绘制不对. 两个0之间的连线应该是平滑直线,如图: 正确的显示: 解决: 在myCharts.setOption(option) ...
- python杂乱知识点
1. = == is =: ==:比较 值是否相等 is:比较,比较的是内存地址 2. id(内容):得到内容的起始内存地址 3.数字,字符串,存在小数据池的概念,如果如果创建了一样的数字或者字符串 ...
- Nmap详解
扫描方式 -Pn/-P0:扫描前不用ping测试目标是否可达,默认所有目标端口都可达 -sT:TCP Connect扫描,进行完整的TCP三次握手,该类型扫描已被检测,且会在目标日志中记录大量连接请求 ...
- bugkuCTFWEB部分WP
前言 之前做的今天整理下 这个有点乱不建议大家参考我的wp 这个主要是自己看的.部分的我做的时候打不开就没写. 练手地址:https://ctf.bugku.com 矛盾 矛盾考察的是PHP弱类型首先 ...
- 建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上
前言 对于大厂面试,我想要强调的一点就是心态真的很重要,是决定你在面试过程中发挥的关键,若不能正常发挥,很可能就因为一个小失误与offer失之交臂,所以一定要重视起来.另外提醒一点,充分复习,是消除你 ...
- Codeforces375D Tree and Queries
dsu on tree 题目链接 点我跳转 题目大意 给定一棵 \(n\) 个节点的树,根节点为 \(1\).每个节点上有一个颜色 \(c_i\) \(m\) 次询问. 每次询问给出 \(u\) \( ...
- jQuery 第一章 $()选择器
jquery 是什么? jquery 其实就是一堆的js函数(js库),也是普通的js而已. 有点像我们封装一个函数,把他放到单独的js 文件,等待有需要的时候调用它. 那么使用它有啥好处呢? jqu ...