Description

Flute很喜欢柠檬。它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬。贝壳一共有\(N(1\le N\le 100000)\)只,按顺序串在树枝上。为了方便,我们从左到右给贝壳编号 \(1...N\) 。每只贝壳的大小不一定相同,贝壳 \(i\) 的大小为 \(s_i(1 \le s_i \le10000)\) 。变柠檬的魔法要求,Flute每次从树枝一端取下一小段连续的贝壳,并选择一种贝壳的大小 \(s_0\) 。如果 这一小段贝壳中 大小为 \(s_0\) 的贝壳有 \(t\) 只,那么魔法可以把这一小段贝壳变成 \(s_0t^2\) 只柠檬。Flute可以取任意多次贝壳,直到树枝上的贝壳被全部取完。各个小段中,Flute选择的贝壳大小 \(s_0\) 可以不同。而最终 Flute 得到的柠檬数,就是所有小段柠檬数的总和。Flute 想知道,它最多能用这一串贝壳变出多少柠檬。请你帮忙解决这个问题。

Input

第 \(1\) 行:一个整数,表示 \(N\)。
第 \(2 ... N + 1\) 行:每行一个整数,第 \(i + 1\) 行表示 \(s_i\) 。

Output

仅一个整数,表示 Flute 最多能得到的柠檬数。

Sample Input

5
2
2
5
2
3

Sample Output

21

Solution

考虑DP, \(f[i]\) 表示前 \(i\) 个的最大价值。

发现每一段的开头结尾应该是同一个颜色才会最优,否则不如单出来选。

对于 \(f[i]\),假设之前存在一个点 \(j\),这个点的颜色 \(a[j]\) 与 \(i\) 的颜色 \(a[i]\) 相等,那么我们可以让 \(f[i]\) 由 \(j\) 转移, \(s[i]\) 代表前 \(i\) 个数里 \(a[i]\) 出现的次数,价值为 \[f[j-1]+a[j]\times (s[i]-s[j]+1)^2\]

很可以斜率的样子欸...

#include<bits/stdc++.h>
using namespace std;#define N 100001
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define ll long longinline int read() {int x = 0, flag = 1; char ch = getchar(); while (!isdigit(ch)) { if (!(ch ^ '-')) flag = -1; ch = getchar(); }while (isdigit(ch)) x = (x << 1) + (x << 3) + ch - '0', ch = getchar(); return x * flag;
}int n;
ll a[N], f[N];
int cnt[N], s[N];
vector<int> q[N];inline ll calc(int x, int y) { return f[x - 1] + a[x] * y * y; }
inline int k(int x, int y) {int l = 1, r = n, mid, ret = n + 1;while(l <= r) if(calc(x, (mid = l + r >> 1) - s[x] + 1) >= calc(y, mid - s[y] + 1)) ret = mid, r = mid - 1; else l = mid + 1;return ret;
}int main() {n = read();rep(i, 1, n) {int t = a[i] = read(); cnt[t]++, s[i] = cnt[t];while(q[t].size() >= 2 && k(q[t][q[t].size() - 2], q[t][q[t].size() - 1]) <= k(q[t][q[t].size() - 1], i)) q[t].pop_back();q[t].push_back(i);while(q[t].size() >= 2 && k(q[t][q[t].size() - 2], q[t][q[t].size() - 1]) <= s[i]) q[t].pop_back();f[i] = calc(q[t][q[t].size()-1], s[i] - s[q[t][q[t].size()-1]] + 1);}cout << f[n];return 0;
}

转载于:https://www.cnblogs.com/aziint/p/8419030.html

bzoj4709 [Jsoi2011]柠檬相关推荐

  1. LuoguP5504 [JSOI2011]柠檬

    LuoguP5504 [JSOI2011]柠檬 题目描述 Solution 容易发现一个性质:每一段划分区间的首尾两个元素相同. 因为倘若不相同的话其中至少一个元素也就不产生贡献,将其划分在其他区间一 ...

  2. bzoj 4709: [Jsoi2011]柠檬(分段DP+决策单调性)

    4709: [Jsoi2011]柠檬 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 240  Solved: 105 [Submit][Status ...

  3. 【bzoj4709】[Jsoi2011]柠檬 斜率优化

    题目描述 给你一个长度为 $n$ 的序列,将其分成若干段,每段选择一个数,获得 $这个数\times 它在这段出现次数的平方$ 的价值.求最大总价值. $n\le 10^5$ . 输入 第 1 行:一 ...

  4. 单调队列优化和决策单调性优化

    前言:dp蒟蒻拼命挽救一下dp a....,会围绕三个"形如"来写...但更重要的是本质理解啊qwq A.单调队列优化: 有时状态转移方程形如f[i][j]=min{f[i-1][ ...

  5. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  6. 基础省选+NOI-第4部分 动态规划

    1.期望概率DP [整理]简单的数学期望和概率DP [整理]简单的数学期望和概率DP - nimphy - 博客园 期望&概率dp总结 期望&概率dp总结_十分残念的博客-CSDN博客 ...

  7. 省选+NOI 第一部分 动态规划DP

    期望概率DP [整理]简单的数学期望和概率DP [整理]简单的数学期望和概率DP - nimphy - 博客园 期望&概率dp总结 期望&概率dp总结_十分残念的博客-CSDN博客 期 ...

  8. 斜率优化dp 的简单入门

    不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294 ...

  9. LeetCode简单题之柠檬水找零

    题目 在柠檬水摊上,每一杯柠檬水的售价为 5 美元.顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 20 美元.你必 ...

最新文章

  1. 配置文件app.config
  2. python实现redis分布式锁
  3. Java 11快多少?
  4. cmake 简介-初识
  5. [VB]使用ADOX创建Excel文件
  6. 面向对象编程(三):重载运算符和重载函数
  7. MVC自定义路由的配置,必须把自己的路由写在前面
  8. 局域网内计算机无法ping通,局域网内目标主机无法ping通怎么处理 局域网内目标主机无法ping通如何解决...
  9. 最新上市公司商誉减值损失数据
  10. python写诗代码_python实现诗歌游戏(类继承)
  11. python实现输出日历_python实现输出日历
  12. superset 完全汉化
  13. 图解HTTP(笔记)
  14. js-拖拽-div跟随鼠标的拖拽而移动
  15. The Google File System 中文版论文(转载)
  16. 怎么比较两个字符串的大小?
  17. vue-video-player 拖动进度条触发暂停移动端展示倍速菜单
  18. 定期定量采购_定量、定期订货法的比较
  19. CSS flex的一些属性
  20. python课程设计的主要任务_Python课程设计:微课视频版

热门文章

  1. excel单元格内容合并
  2. HBase错误:ERROR: Can't get master address from ZooKeeper; znode data == null 解决办法
  3. 操作系统下查看HBA卡信息wwn的方法
  4. 一台服务器装两个sql server 如何访问吗_服务器多网卡多路由策略
  5. window下查看dll, lib文件是32位还是64位
  6. mysql 打包 脚本_windows下mysql自动备份压缩打包时间命名批处理脚本
  7. t oracle删除吗,Oracle 11g 手工建库与删库
  8. 神经网络Drop大法真香定律
  9. android webview rem,Android部分webview rem计算误差记录
  10. routersploit简单实例