时隔多年没有碰斜率优化了。。。

想当年被斜率优化虐的死去活来,现在看看。。。也就那样吧。

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

首先根据方差的定义我们可以将方差的公式\(s^{2}=\frac{\sum_{i=1}^{n}(x_{i}-\bar x)^{2}}{n}\)转换为\(s^{2}=\frac{\sum_{i=1}^{n}x_{i}^2}{m}-\frac{sum_{n}^{2}}{m^{2}}\)

(\(sum\)数组为前缀和)

(具体转换过程可以百度百科方差)

对于式子中的\(\frac{sum_{n}^{2}}{m^{2}}\)是已经确定的常数,目前不用考虑。于是我们要求的便是\(min(\sum_{i=1}^{n}x_{i}^2)\)。

于是题目就被我们转换为了将\(n\)段路分为\(m\)个块,使它们的平方和最小,不难得出DP的状态转移方程是:

\(f_{i,j}=min(f_{k,j-1}+(sum_{i}-sum_{k})^{2},f_{i,j})\)

只需要枚举k即可,其中状态的第一维定义为第\(i\)段路,第二维定义为第\(j\)个块。

然而不难发现时间复杂度过高,于是可以使用斜率优化。详见代码

#include <bits/stdc++.h>
using namespace std; #define N 3100
#define LL long long int n,A[N],S[N],m,q[3*N];
LL f[N][N]; int fucky (int a,int j) {
return f[a][j-1]+S[a]*S[a];
} int fuck (int a,int b,int j) {
return (fucky(a,j)-fucky(b,j))/(S[a]-S[b]);
} int main() {
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>A[i],S[i]=S[i-1]+A[i];
for(int i=1;i<=n;i++) f[i][1]=S[i]*S[i];
for(int j=2;j<=m;j++) {
int l=1,r=1;
for(int i=1;i<=n;i++) {
while(l<r && fuck(q[l],q[l+1],j)<2*S[i]) l++;
int BestPos=q[l];
f[i][j]=f[BestPos][j-1]+(S[i]-S[BestPos])*(S[i]-S[BestPos]);
while(l<r && fucky(q[r],i,j)<fucky(q[r-1],q[r],j)) r--;
q[++r]=i;
}
}
cout<<f[n][m]*m-S[n]*S[n];
}

[SDOI2016]征途 —— 斜率优化DP的更多相关文章

  1. 洛谷 P4072 [SDOI2016]征途 斜率优化DP

    洛谷 P4072 [SDOI2016]征途 斜率优化DP 题目描述 \(Pine\) 开始了从 \(S\) 地到 \(T\) 地的征途. 从\(S\)地到\(T\)地的路可以划分成 \(n\) 段,相 ...

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

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

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

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

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

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

  5. 【bzoj4518】[Sdoi2016]征途 斜率优化dp

    原文地址:http://www.cnblogs.com/GXZlegend/p/6812435.html 题目描述 Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界 ...

  6. [SDOI2015][bzoj4518] 征途 [斜率优化dp]

    题面 传送门 思路 把$vm^2$展开化一下式子,可以得到这样的等价公式: $vm^2=m\sum_{i=1}^m a_i^2-\sum_{i=1}^m a_i$ 那么我们要最小化的就是$\sum_{ ...

  7. 【BZOJ4518】[Sdoi2016]征途 斜率优化

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

  8. [bzoj4518][Sdoi2016]征途-斜率优化

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

  9. P4072 [SDOI2016](BZOJ4518) 征途 [斜率优化DP]

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

随机推荐

  1. ELK + filebeat集群部署

    ELK + filebeat集群部署 一.ELK简介 1. Elasticsearch Elasticsearch是一个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数 ...

  2. 关于<input type="hidden"/>标签的记录

    <input type="hidden" name="pid" value="10"/>标签放在一个input标签后可以使用,但 ...

  3. 19Redis

    1.概念 redis是一款高性能的NOSQL系列的非关系型数据库 1.1什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非 ...

  4. AT Regular 086

    C - Not so Diverse 略 D - Non-decreasing 先找绝对值最大的数 构造出全正(最大的数为正) 或者全负(最大的数为负) 然后前缀和(正)或者后缀和(负) 操作次数2n ...

  5. 欧拉降幂公式 Super A^B mod C

    Description Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=100000 ...

  6. postman(二):详解在Pre-request Script中如何执行请求

    一.这里以Pre-request Script标签来介绍 postman提供了postman提供了一个"Send a request"代码段,他是已经封装好的发送请求的方法 一个& ...

  7. Extjs中如何在一行textfield后面增加文字提示

    添加监听事件: listeners: {               render: function(obj) {                     var font=document.cre ...

  8. <el-menu>菜单标签(里面可以包括:<el-submenu>和<el-menu-item>)

    <el-menu> 1.router属性,若使用router属性menu-item的index将对应router的path属性 2.mode,下拉菜单的模式分为horizontal和ver ...

  9. 【python】对于程序员来说,2018刑侦科推理试卷是问题么?

    最近网上很火的2018刑侦科推理试卷,题目确实很考验人逻辑思维能力. 可是对于程序员来说,这根本不是问题.写个程序用穷举法计算一遍即可,太简单. import itertools class Solu ...

  10. 解决使用脚手架构建项目缺失node_modules文件夹文件问题

    昨晚,在教我前端交流群里面的朋友搭建vue开发环境和构建vue项目的时候发现我自己之前能正常构建vue项目的现在却不行了,排查之下发现 通过脚手架构建项目的时候项目缺失了node_modules文件夹 ...