Description

题库链接

将一个长度为 \(n\) 的正整数序列分为 \(m\) 段,问你这 \(m\) 段最小的方差 \(v\) 为多少。输出 \(v\times m^2\) 。

\(1\leq n\leq 3000\)

Solution

容易发现答案就是:

\[m^2\frac{\sum\limits_{i=1}^m(a_i-\overline{a})^2}{m}=m\sum\limits_{i=1}^m\left(a_i-\frac{\sum\limits_{i=1}^m a_i}{m}\right)^2\]

记 \(s=\sum\limits_{i=1}^m a_i\) ,

\[m\sum_{i=1}^m a_i^2-2s\sum_{i=1}^m a_i+s^2\]

这玩意就可以斜率优化了。

upd

做的时候制杖了...发现最后的式子还可以化成 \[m\sum_{i=1}^m a_i^2-s^2\]

Code

//It is made by Awson on 2018.3.19
#include <bits/stdc++.h>
#define LL long long
#define dob complex<double>
#define Abs(a) ((a) < 0 ? (-(a)) : (a))
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Swap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))
#define writeln(x) (write(x), putchar('\n'))
#define lowbit(x) ((x)&(-(x)))
using namespace std;
const int N = 3000;
void read(LL &x) {char ch; bool flag = 0;for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || 1); ch = getchar());for (x = 0; isdigit(ch); x = (x<<1)+(x<<3)+ch-48, ch = getchar());x *= 1-2*flag;
}
void print(LL x) {if (x > 9) print(x/10); putchar(x%10+48); }
void write(LL x) {if (x < 0) putchar('-'); print(Abs(x)); }LL n, m, sum[N+5], s;
LL f[N+5][N+5];
int q[N+5], head, tail;LL deltax(int p, int q) {return m*2*(sum[q]-sum[p]); }
LL deltay(int p, int q) {return m*sum[q]*sum[q]-m*sum[p]*sum[p]+s*2*sum[q]-s*2*sum[p]; }
void work() {read(n), read(m); for (int i = 1; i <= n; i++) read(sum[i]), sum[i] += sum[i-1];s = sum[n]; memset(f, 127/3, sizeof(f));f[0][0] = 0;for (int i = 1; i <= m; i++) {head = tail = 0; q[tail++] = 0;for (int j = 1; j <= n; j++) {while (tail-head > 1 &&f[i-1][q[head+1]]-f[i-1][q[head]]+deltay(q[head], q[head+1]) <=sum[j]*deltax(q[head], q[head+1])) ++head;f[i][j] = f[i-1][q[head]]+m*(sum[j]-sum[q[head]])*(sum[j]-sum[q[head]])-(sum[j]-sum[q[head]])*2*s;while (tail-head > 1 &&(f[i-1][q[tail-1]]-f[i-1][q[tail-2]]+deltay(q[tail-2], q[tail-1]))*deltax(q[tail-1], j) >=(f[i-1][j]-f[i-1][q[tail-1]]+deltay(q[tail-1], j))*deltax(q[tail-2], q[tail-1])) --tail;q[tail++] = j;}}writeln(f[m][n]+s*s);
}
int main() {work(); return 0;
}

转载于:https://www.cnblogs.com/NaVi-Awson/p/8605600.html

[SDOI 2016]征途相关推荐

  1. 【SDOI 2016】征途

    传送门 Problem 给出一个有 n n n 个数的序列 { a n } \{a_n\} {an​},现要把它分成 m m m 段,设每段的权值为该段 a i a_i ai​ 之和,求出这 m m ...

  2. SDOI 2016 游戏

    树链剖分 线段树维护区间最小值,区间最大值 更新,对于每一个区间,找到当前区间的最小值的最大值,和要更新的值比较,如果比最大值还大,则此数对于以后的询问无任何贡献,直接返回即可,若有贡献,则一直递归到 ...

  3. SDOI 2016 生成魔咒 题解

    题目传送门 题目大意: 给出一个字符串,询问它的每一个前缀内包含多少个不同的子串. 题解 将字符一个一个加入到SAM里,每个新的字符的的贡献为 l e n ( x ) − l e n ( l i n ...

  4. 后缀自动机/回文自动机/AC自动机/序列自动机----各种自动机(自冻鸡) 题目泛做...

    题目1 BZOJ 3676 APIO2014 回文串 算法讨论: cnt表示回文自动机上每个结点回文串出现的次数.这是回文自动机的定义考查题. 1 #include <cstdlib> 2 ...

  5. 回顾4180天在腾讯使用C#的历程,开启新的征途

    今天是2018年8月8日,已经和腾讯解除劳动关系,我的公司正式开始运营,虽然还有很多事情需要理清,公司官网也没有做,接下来什么事情都需要自己去完成了,需要一步一个脚印去完善,开启一个新的征途. 昨天是 ...

  6. 纪念张首晟教授:英魂长存于行行字迹 何惧漫漫征途

    著名美国华裔科学家,美国斯坦福大学终身教授,张首晟教授因病于2018年12月1日在旧金山逝世,享年55岁. 为了追忆张首晟教授的生平,张教授家人在美国西部时间5月1日下午于斯坦福举办纪念活动,邀请社会 ...

  7. 中国云计算产业2016年度点评

    版权声明:转载需全文转载并保留来源(微信公众号鸣北林techculture)和原文链接,并同时转载二维码,否则视作侵权. 谨慎点击,因为已经约定:这是一篇付费文章,200元一人,学生例外-20元.通过 ...

  8. 亚马逊云科技启示录:创新作帆,云计算的征途是汪洋大海

    开篇:创新是亚马逊云科技发展的最持久驱动力 云计算,新世纪以来最伟大的技术进步之一,从2006年 Amazon Web Service 初创时的小试牛刀,到如今成长为一个巨大的行业和生态,已经走过16 ...

  9. AWS启示录:创新作帆,云计算的征途是汪洋大海

    全文13100字,预计阅读时间15到20分钟. 开篇:创新是AWS发展的最持久驱动力 云计算,新世纪以来最伟大的技术进步之一,从2006年 Amazon Web Service(以下简称AWS)初创时 ...

最新文章

  1. 合格SEOER应该具备的能力
  2. 如何识别未使用的CSS定义[关闭]
  3. apache安装mod_ssl.so 出现 undefined symbol: ssl_cmd_SSLPassPhraseDialog错误解决
  4. CentOS 设置网络(修改IP 网关 DNS)上网
  5. DIP第三章习题解答
  6. 前端学习(1153):常量const01
  7. leetcode197. 上升的温度(SQL)
  8. html中超链接无效怎么办,超链接问题:“引用无效”怎么回事
  9. Hyper-v中安装centos网卡故障
  10. php基本语法(简略篇)
  11. 高仿京东分类页面实现
  12. 7-1 前序序列创建二叉树
  13. jmeter 接口测试 签名_JMeter处理接口签名(sign)
  14. php英文数字转为中文,利用PHP怎么将英文数字转换为阿拉伯数字
  15. Redis热点Key发现及常见解决方案总结
  16. WINDOWS远程连接显示“请稍后”
  17. 面试题:两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
  18. 哈工大SCIR出品《自然语言处理》新书,无套路送5本!
  19. 2017年研究生数学建模优秀论文汇总
  20. 从零开始搭建 Filecoin 主网挖矿集群

热门文章

  1. MySQL必备知识表的查询
  2. electron 截取图片
  3. python cpk图,seve图片'数据:image/jpeg;base64'用Python
  4. Hbuilder 打开iOS真机调试操作
  5. Cookie报错java.lang.IllegalArgumentException
  6. html处理\n\t字符
  7. DCOM服务启动失败的解决办法
  8. 【AE表达式】以插值方法代替关键帧
  9. C语言程序设计第三版苏小红5.7键盘输入字符,字母大写改小写,小写改大写,并输出ASCII码
  10. OpenCL与CUDA,CPU与GPU