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

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

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. 解决solr无法加core

    提示缺少配置文件:Error CREATEing SolrCore 'new_core': Unable to create core [new_core] Caused by: Can't find ...

  2. Spring基础12——使用外部属性文件

    1.使用外部属性文件 在配置文件里配置Bean时,有时需要在Bean的配置文件里引入系统部署的细节信息(例如:文件的路径.数据源配置信息等),而这些部署细节实际上需要和bean配置相分离,因为我们修改 ...

  3. 仿scikit-learn模式写的kNN算法

    一.什么是kNN算法 k邻近是指每个样本都可以用它最接近的k个邻居来代表. 核心思想:如果一个样本在特征空间中的k个最相邻的样本中大多数属于一个某类别,则该样本也属于这个类别. 二.将kNN封装成kN ...

  4. 【学习】022 ActiveMQ

    一.消息中间件概述 1.1消息中间件产生的背景 在客户端与服务器进行通讯时.客户端调用后,必须等待服务对象完成处理返回结果才能继续执行.  客户与服务器对象的生命周期紧密耦合,客户进程和服务对象进程都 ...

  5. 3--面试总结-es6

    es6文档:http://es6.ruanyifeng.com/1.es6新特性 let/const 变量的解构赋值(数组的解构赋值,对象的解构赋值,字符串的解构赋值,数值和布尔值的解构赋值,函数参数 ...

  6. bean获取Spring容器

    Person.java public class Person implements ApplicationContextAware{ private String name; private int ...

  7. LOJ bitset+分块 大内存毒瘤题

    题面 $ solution: $ 真的没有想到可以用分块. 但是可以发现一个性质,每个询问只关心这个点最后一次赋值操作,和这个赋值操作后的所有取 $ min $ 操作.这个感觉很有用,但是真的很难让人 ...

  8. Django【第22篇】:基于Ajax实现的登录

    基于ajax实现的登录 一.需要知道的新知识点 1.刷新验证码.给src属性加一个?号.加个?会重新去请求 //#给验证码刷新 $(".vialdCode_img").click( ...

  9. [洛谷P4107] HEOI2015 兔子与樱花

    问题描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...

  10. ajax请求成功,但是进入error

    ajax请求成功,这是因为json数据没有严格按json格式返回