[Jsoi2011]柠檬】的更多相关文章

题目链接 bzoj4709: [Jsoi2011]柠檬 题解 斜率优化 设 \(f[i]\) 表示前 \(i\)个数分成若干段的最大总价值. 对于分成的每一段,左端点的数.右端点的数.选择的数一定是相同的.如果不相同则可以从这个段里删去这个数,答案会更优. 于是就有转移:\(f_i=f_{j-1}+a·(c_i-c_j+1)^2\ ,\ j\le i\ ,\ a_j=a_i\) ,其中 \(a\) 表示原序列,\(c\) 表示这个位置时这个数第几次出现 显然这个式子可以斜率优化,整理得:$ac_…
4709: [Jsoi2011]柠檬 https://www.lydsy.com/JudgeOnline/problem.php?id=4709 分析: 决策单调性+栈+二分. 首先挖掘性质:每个段选的数必须是起点或者终点,起点和终点的数必须是一样的.否则可以去掉起点或者终点的一个数,答案不会变差. 然后又n^2dp:f[i]=f[j]+cost(j,i),cost(j,i)=a[i]*(s[i]-s[j])^2.s[i]表示到i时候,a[i]的个数. 单独对每个数字考虑,因为后面存在一个平方,…
4709: [Jsoi2011]柠檬 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 779  Solved: 310[Submit][Status][Discuss] Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N  ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从左到右给贝壳编号 1..N.每只贝壳的大小不一定相同, 贝壳 i 的大小为 si…
[BZOJ4709][Jsoi2011]柠檬 Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从左到右给贝壳编号 1..N.每只贝壳的大小不一定相同,贝壳 i 的大小为 si(1 ≤ si ≤10,000).变柠檬的魔法要求,Flute 每次从树枝一端取下一小段连续的贝壳,并选择一种贝壳的大小 s0.如果 这一小段贝壳中 大小为 s0 的贝壳有 t…
[LG5504][JSOI2011]柠檬 题面 洛谷 题解 考虑\(dp\),令\(f_i\)表示\(dp\)到第\(i\)位且在第\(i\)位分段的最大值. 我们令题面中的\(s_i\)为\(a_i\),那么对于一个转移点\(j\),显然\(a_i=a_j\),因为多余的颜色肯定无法产生贡献,不如不选. 令\(c_i\)为位置\(i\)的颜色第几次出现. 那么有转移方程: \[ f_i=f_{j-1}+a_i(c_i-c_j+1)^2 \] 推下式子: \[ f_i=f_{j-1}+a_i(c…
笔记-[JSOI2011]柠檬 [JSOI2011]柠檬 \(f_i\) 表示到第 \(i\) 只贝壳最多可以换得的柠檬数. 令 \(c_i=\sum_{h=1}^i[s_h=s_i]\). \[\begin{split} 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…
Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N  ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从左到右给贝壳编号 1..N.每只贝壳的大小不一定相同, 贝壳 i 的大小为 si(1 ≤ si ≤10,000).变柠檬的魔法要求,Flute 每次从树枝一端取下一小段连续的贝壳,并 选择一种贝壳的大小 s0.如果 这一小段贝壳中 大小为 s0 的贝壳有 t 只,那么魔法可以把这一小段贝壳变成 s…
题目描述 给你一个长度为 $n$ 的序列,将其分成若干段,每段选择一个数,获得 $这个数\times 它在这段出现次数的平方$ 的价值.求最大总价值. $n\le 10^5$ . 输入 第 1 行:一个整数,表示 N. 第 2 .. N + 1 行:每行一个整数,第 i + 1 行表示 si. 输出 仅一个整数,表示 Flute 最多能得到的柠檬数. 样例输入 522523 样例输出 21 题解 斜率优化 设 $f[i]$ 表示前 $i$ 个数分成若干段的最大总价值. 显然对于分成的每一段,左端…
Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从左到右给贝壳编号 1..N.每只贝壳的大小不一定相同,贝壳 i 的大小为 si(1 ≤ si ≤10,000).变柠檬的魔法要求,Flute 每次从树枝一端取下一小段连续的贝壳,并选择一种贝壳的大小 s0.如果 这一小段贝壳中 大小为 s0 的贝壳有 t 只,那么魔法可以把这一小段贝壳变成 s0t^…
Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从左到右给贝壳编号 1..N.每只贝壳的大小不一定相同, 贝壳 i 的大小为 si(1 ≤ si ≤10,000).变柠檬的魔法要求,Flute 每次从树枝一端取下一小段连续的贝壳,并 选择一种贝壳的大小 s0.如果 这一小段贝壳中 大小为 s0 的贝壳有 t 只,那么魔法可以把这一小段贝壳变成 s…
Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从左到右给贝壳编号 1..N.每只贝壳的大小不一定相同, 贝壳 i 的大小为 si(1 ≤ si ≤10,000).变柠檬的魔法要求,Flute 每次从树枝一端取下一小段连续的贝壳,并 选择一种贝壳的大小 s0.如果 这一小段贝壳中 大小为 s0 的贝壳有 t 只,那么魔法可以把这一小段贝壳变成 s…
Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从左到右给贝壳编号 1..N.每只贝壳的大小不一定相同, 贝壳 i 的大小为 si(1 ≤ si ≤10,000).变柠檬的魔法要求,Flute 每次从树枝一端取下一小段连续的贝壳,并 选择一种贝壳的大小 s0.如果 这一小段贝壳中 大小为 s0 的贝壳有 t 只,那么魔法可以把这一小段贝壳变成 s…
传送门 显然考虑 $dp$ ,发现从右往左和从左往右是一样的,所以只考虑一边就行 发现对于切的左右端点,选择的 $s0$ 一定要为左右端点的贝壳大小,不然这个端点不产生贡献还不如分开来单个贡献 所以设 $f[i]$ 表示当前把 $1$ 到 $i$ 的都切了,产生的最大贡献,设 $c[i]$ 表示位置 $i$ 及之前大小为 $s[i]$ 的柠檬个数,有转移: $f[i]=f[j-1]+s[i](c[i]-c[j]+1)^2,j \in [1,i]$,并且要满足 $s[i]=s[j]$ ,发现是个斜…
题解: 解法1: 单调栈优化 首先发现一个性质就是 如果当前从i转移比从j转移更加优秀 那么之后就不会从j转移 所以我们考虑利用这个性质 我们要维护一个队列保证前一个超过后一个的时间单调不减 怎么来维护呢 我们计算s[t-2]超过s[t-1]的时间t1,s[t-1]超过i的时间t2,如果t1<t2就说明了s[t-1]没有用了 另外再更新的时候我们算一下相邻两个哪个比较有用,要是前面哪个就弹栈 解法2: f[i]=max(f[j−1]+a[j]×(s[i]−s[j]+1)^2) 我们先尝试一下一般…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4709 题解:https://blog.csdn.net/neither_nor/article/details/53285115 每次选的段的两端种类相同.因为贡献有个数的二次方,所以对于 i ,更小的 j 的 [ j+1 , i ] 之间部分的贡献增长得更快.所以随着个数的增加,较小的 j 会越来越优于较大的 j ,就有决策单调性. 但是用指针的话,可能有下一个位置不优于这个位置,但下下…
首先要冷静下来发现这仅仅是在划分区间.显然若有相邻的数字相同应当划分在同一区间.还有一个显然的性质是区间的两端点应该相同且选择的就是端点的数.瞬间暴力dp就变成常数极小100002了.可以继续斜率优化然而懒了. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using…
显然选出的每一段首尾都是相同的,于是直接斜率优化,给每个颜色的数开一个单调栈即可. #include<cstdio> #include<vector> #include<cstring> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) typedef long long ll; using namespace std; ; ll n,ans,a[N],f[N],ls…
题意 题目链接 Sol 结论:每次选择的区间一定满足首位元素相同.. 仔细想想其实挺显然的,如果不相同可以删掉多着的元素,对答案的贡献是相同的 那么设\(f[i]\)表示到第\(i\)个位置的最大价值,\(s[i]\)表示到\(i\)位置,\(a[i]\)的出现次数,转移方程为 \[f[i] = max(f_{j - 1} + a[i] * (s[i] - s[j] +1)^2)\] 满足\(a[i] = a[j]\) 看起来好像是可以斜率优化的样子,不过存在另外一种解释.. 具体看这里吧 感觉…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4709 课上讲的题,还是参考了博客...:https://www.cnblogs.com/GXZlegend/p/8615607.html 这道题和之前写的斜率优化不同的一点是用单调栈维护上凸壳,而且需要二分查找答案: 为什么感觉每次写出来的斜率优化DP都不一样...还是没有理解透彻... 代码如下: #include<iostream> #include<cstdio> #i…
bgm(雾) luogu 首先是那个区间的价值比较奇怪,如果推导后可以发现只有左右端点元素都是同一种\(s_x\)的区间才有可能贡献答案,并且价值为\(s_x(cnt(x)_r-cnt(x)_{l-1})^2\),这是因为如果选出来的这种元素的端点的左右两边还有其他元素,那么显然的把那些其他的元素另外划分在别的区间里可以获得更优的答案 然后现在就可以\(O(n^2)\)了,转移大概为\(f_i=\min_{j<i,s_j=s_i} f_{j-1}+s_i(cnt(s_i)_i-cnt(s_i)_…
题目传送门 题目大意 给出一个区间,每个点都有一个颜色,把这个区间分为许多块,每一块的权值为 \(\max\{s\times t^2\}\) ,其中 \(s\) 为某种颜色,\(t\) 为该颜色在该块中出现的次数.问最大权值之和. \(n\le 10^5,s_i\le 10^4\) 思路 话说用笔记本打代码真的好难受啊!!! 首先我们可以看出这个肯定是个 dp ,可以列出 dp 式: \[dp[i]=\max\{dp[j-1]+\text{count}(j\to i)\} \] 于是问题就是如何…
4709: [Jsoi2011]柠檬 Time Limit: 10 Sec  Memory Limit: 128 MB Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N  ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从左到右给贝壳编号 1..N.每只贝壳的大小不一定相同, 贝壳 i 的大小为 si(1 ≤ si ≤10,000).变柠檬的魔法要求,Flute 每次从树枝一端取下一小段连续的贝壳…
(这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27update : 开学了终于搞到了550  可还行 *数据结构 *可持久化线段树/主席树 *bzoj3932 [CQOI2015] 任务查询系统 : 比较裸的主席树,任务查分一下就好了  cqoi真良心 *bzoj4026 dC Loves Number Theory :  数论个头啊,对每个数分解质因数…
不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294) 部分 这是——大米饼大佬 看完了大米饼同志对斜率优化的介绍,下面我来稍微讲讲对斜率优化dp 的理解 前置知识 单调队列(栈) 平面直角坐标系 直线解析式 等式处理 dp状态设计 balabala...... 理解 其实斜率优化 dp 的原理很简单: 根据题目(斜率优化 dp 的题目一般都很裸)的…
前缀和优化 当DP过程中需要反复从一个求和式转移的话,可以先把它预处理一下.运算一般都要满足可减性. 比较naive就不展开了. 题目 [Todo]洛谷P2513 [HAOI2009]逆序对数列 [Done]洛谷P2511 [HAOI2008]木棍分割 [Done]洛谷P4099 [HEOI2013]SAO [Done]NOIAC37 染色 单调队列优化 前置技能:单调队列(经典的问题模型:洛谷P1886 滑动窗口) 用于优化形如\(f_i=\min/\max_{j=l_i}^{i-1}\{g_…
题目背景 OL不在,Clao又在肝少*前线,他虽然觉得这个游戏的地图很烦,但是他认为地图的难度还是太低了,习习中作为策划还不够FM,于是他自己YY了一种新的地图和新的机制: 题目描述 整个地图呈树形结构,共有N+1 个节点,0 号节点为树的根节点,并且,与0 号节点相连的就只有1 号节点,除0 号节点外的所有节点上都会有一队战斗力为V_i的敌人存在: 指挥部设在0 号节点,玩家的操纵梯队只能出生在该节点,并且在进入地图时玩家将选择任意一个节点作为本次任务的终点,设为E ,玩家只需要将根节点到EE…
标 * 的是推荐阅读的部分 / 做的题目. 1. 动态 DP(DDP)算法简介 动态动态规划. 以 P4719 为例讲一讲 ddp: 1.1. 树剖解法 如果没有修改操作,那么可以设计出 DP 方案 \(f_{i,0/1}\) 分别表示不选(\(0\))/ 选(\(1\))点 \(i\) 的最大权值,那么有 \(f_{i,0}=\sum_{x\in S_i}\max(f_{x,0},f_{x,1}),f_{i,1}=v_i+\sum_{x\in S_i}f_{i,0}\). 如果加上修改操作,那…
「JSOI2011」柠檬 传送门 斜率优化题. 在优化前,还有一个值得一提的优化: 对于最后的最优分割方案,每一段的两个端点一定是同颜色的,并且作为这一段的 \(s_0\) 证明:如果不作为这一段的 \(s_0\),那么它显然没有贡献,把这一个单独分出来显然更优,直到最后两个端点就一定都是 \(s_0\) ,颜色相同. 那么我们只需要从之前和该点种类相同的位置进行转移即可. 这样就从直接枚举的复杂度 \(O(n^3)\) 优化到了 \(O(n^2)\) ,但还是不够,继续考虑优化. 我们先把转移…
Description 传送门 题意简述:将序列划分成任意多段,从每一段选出一个数\(x\),获得\(在这一段出现的次数x*(x在这一段出现的次数)\)的贡献.求总贡献最大值. Solution ​ 首先,要发现一个很重要的性质:如果某一段选了\(x\),那么这一段一定是以\(x\)开头.以\(x\)结尾的一段.否则,可以将此段缩减至以\(x\)开头.以\(x\)结尾的更小的一段,虽然贡献没有变,但留给其他段的机会更多. 设\(f_i\)表示\(1...i\)的贡献最大值.记\(a_i\)表示\…
1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1017  Solved: 562[Submit][Status][Discuss] Description Input 文件的第1行包含一个整数n和一个实数alpha,表示柠檬树的层数和月亮的光线与地面夹角(单位为弧度).第2行包含n+1个实数h0,h1,h2,…,hn,表示树离地的高度和每层的高度.第3行包含n个实数r1,r2,…,rn,表示柠檬树每层下底面的…