Description

Pine开始了从S地到T地的征途。

从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站。

Pine计划用m天到达T地。除第m天外,每一天晚上Pine都必须在休息站过夜。所以,一段路必须在同一天中走完。

Pine希望每一天走的路长度尽可能相近,所以他希望每一天走的路的长度的方差尽可能小。

帮助Pine求出最小方差是多少。

设方差是v,可以证明,v×m2是一个整数。为了避免精度误差,输出结果时输出v×m2。

Input

第一行两个数 n、m。

第二行 n 个数,表示 n 段路的长度

Output

一个数,最小方差乘以 m^2 后的值

Sample Input

5 2

1 2 5 8 6

Sample Output

36

HINT

1≤n≤3000,保证从 S 到 T 的总路程不超过 30000


方差公式

\[\frac { \sum_{i=1}^m(x_i-\frac{sum}{m})^2}{m}
\]

再乘上\(m^2\)

\[\sum_{i=1}^m[m\times (x_i-\frac{sum}{m})^2]$$画柿子就是

$$m\times \sum_{i=1}^m x^2 -sum^2\]

由于第二项是确定的,所以只需要最小化第一项

继续拆

\[m\times \sum_{i=1}^na_i^2+2\times m\times\sum _{k=1}^m \sum_{i=x_{kl}}^{x_{kr}-1}\sum_{j=i+1}^{x_{kr}}a_i\times a_j
\]

第一项又变成定值,最小化第二项

用\(s[i]\)表示前缀和,\(d[k]\)表示$$\sum_{i=1}k\sum_{j=i+1}ka_i\times a_j$$

那么表示上个柿子第二项就是$$d[r]-d[l]-(s[r]-s[l])\times s[l]$$

然后就可以斜率优化啦!当决策\(l\)比\(k\)优就是

\[s[i]>\frac{(d_l-s_l^2-f_l)-(d_k-s_k^2-f_k)}{s_k-s_l}
\]

\(f_x\)表示的是转移向的代价


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define M 3001
#define X(i,k) (d[i]-s[i]*s[i]-f[k][i])
#define xl(x,y,k) ((double)X(x,k)*1.0-(double)X(y,k)*1.0)/((double)s[y]*1.0-1.0*s[x])
#define LL int
LL i,m,n,j,k,a[M],s[M],f[2][M],d[M],sum,q[2][M],tt,top,tail,head; int main()
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
s[i]=s[i-1]+a[i];
d[i]=d[i-1]+a[i]*s[i-1];
sum+=a[i]*a[i];
}
for(i=1;i<=m;i++)
{
tail=top; head=1;
tt=top=0;
int u=i&1;
for(j=i;j<=n;j++)
{
while(q[!u][head]+1<j && head<tail-1 && xl(q[!u][head+1],q[!u][head],!u)<1.0*s[j]) head+=1;
int x=q[!u][head];
f[u][j]=d[j]-d[x]-(s[j]-s[x])*s[x]+f[!u][x];
while(top>tt+1 && xl(q[u][top],q[u][top-1],u)>xl(j,q[u][top],u)) top-=1;
q[u][++top]=j;
}
}
printf("%d",2*f[m&1][n]*m-s[n]*s[n]+sum*m);
}

4518: [Sdoi2016]征途的更多相关文章

  1. bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)

    题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...

  2. 动态规划(决策单调优化):BZOJ 4518 [Sdoi2016]征途

    4518: [Sdoi2016]征途 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 532  Solved: 337[Submit][Status][ ...

  3. BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]

    4518: [Sdoi2016]征途 题意:\(n\le 3000\)个数分成m组,一组的和为一个数,求最小方差\(*m^2\) DP方程随便写\(f[i][j]=min\{f[k][j-1]+(s[ ...

  4. BZOJ 4518 [Sdoi2016]征途(分治DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4518 [题目大意] 给出一个数列,分成m段,求方差最小,答案乘上m的平方. [题解] ...

  5. ●BZOJ 4518 [Sdoi2016]征途

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4518 题解: 斜率优化DP 首先看看最后答案的形式: 设a[i]为第i天走的距离,那么 $A ...

  6. bzoj 4518: [Sdoi2016]征途

    Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜 ...

  7. bzoj4518[Sdoi2016]征途 斜率优化dp

    4518: [Sdoi2016]征途 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1657  Solved: 915[Submit][Status] ...

  8. BZOJ_4518_[Sdoi2016]征途_斜率优化

    BZOJ_4518_[Sdoi2016]征途_斜率优化 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到 ...

  9. 斜率优化入门学习+总结 Apio2011特别行动队&Apio2014序列分割&HZOI2008玩具装箱&ZJOI2007仓库建设&小P的牧场&防御准备&Sdoi2016征途

    斜率优化: 额...这是篇7个题的题解... 首先说说斜率优化是个啥,额... f[i]=min(f[j]+xxxx(i,j)) ;   1<=j<i (O(n^2)暴力)这样一个式子,首 ...

随机推荐

  1. 哈夫曼编码(Huffman coding)的那些事,(编码技术介绍和程序实现)

    前言 哈夫曼编码(Huffman coding)是一种可变长的前缀码.哈夫曼编码使用的算法是David A. Huffman还是在MIT的学生时提出的,并且在1952年发表了名为<A Metho ...

  2. proto3 笔记1

    定义 Message 类型, 例子如下: syntax = "proto3"; message SearchRequest { string query = 1; int32 pa ...

  3. python可变对象与不可变对象

    可变/不可变对象定义 不可变对象 该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址. 可 ...

  4. JVM学习网址(收集总结)

    1.文章分类 - JVM调优总结   JVM综合调优汇总 星火燎原智勇 2018-08-16 11:11 阅读:8 评论:0 JVM调优04-概括总结 星火燎原智勇 2017-01-08 23:28 ...

  5. 小tip:FireFox下文本框/域百分比padding bug解决——张鑫旭

    一.问题描述 我是流体布局控,经常会遇到文本框以及文本域宽度100%自适应显示的情况. 如下效果图: 在窄屏下,上面的文本框宽度也要跟着外部宽度变小. 难点对于文本框或者文本域,光标最好距离左侧边缘有 ...

  6. 项目小结:手机邮箱正则,URL各种判断返回页面,input输入框输入符合却获取不到问题

    1.手机邮箱正则 近两年出来很多新号码,听说199什么的都有了- -导致以前的正则不能用了....这就很难过,总是过一段时间出一种新号码.因此,我决定使用返朴归真的手机正则. 手机正则:var reg ...

  7. [转]关于浏览器css选择器性能优化

    作为一个前端开发, 我觉得很有必要了解浏览器对css选择器的解析,因为这个关系到页面的渲染,高效的方式.避开开销大的方式这些无疑为网站加载缩短了时间. 最近在新的项目中陷入了一个误区,也是出于对jqu ...

  8. HackerRank Special Substrings 回文树+后缀自动机+set

    传送门 既然要求对每个前缀都求出答案,不难想到应该用回文树求出所有本质不同的回文子串. 然后考虑如何对这些回文子串的前缀进行去重. 结论:答案等于所有本质不同的回文子串长之和减去字典序相邻的回文子串的 ...

  9. vue父与子通信

    个人理解并整理如下 一.父传子 prop传参 父组件传递参数<x-scoll :class="red"></x-scoll> 子组件props:[" ...

  10. 在Eclipse中指定JDK

    1.Windows下的Eclipse中的eclipse.ini -startup plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540 ...