4518: [Sdoi2016]征途

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 1657  Solved: 915
[Submit][Status][Discuss]

Description

Pine开始了从S地到T地的征途。
从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站。
Pine计划用m天到达T地。除第m天外,每一天晚上Pine都必须在休息站过夜。所以,一段路必须在同一天中走完。
Pine希望每一天走的路长度尽可能相近,所以他希望每一天走的路的长度的方差尽可能小。
帮助Pine求出最小方差是多少。
设方差是v,可以证明,v×m^2是一个整数。为了避免精度误差,输出结果时输出v×m^2。
 

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

Source

鸣谢Menci上传

推公式
设s1[i]=1+2+...+i x=s1[n]/m
方差v=((x1-x)^2+(x2-x)^2+...+(xm-x)^2)/m
直接拆开所有平方
v*m^2=m*(x1^2+x2^2+...+xm^2)-2*(x1+x2+...+xm)^2-(m^2)*(x^2)
(m^2)*(x^2)=s1[n]^2 x1+x2+...+xm=s1[n]^2

ans=v*m^2=m*(x1^2+x2^2+...+xm^2)-s1[n]^2
其实化简之后发现 需要知道的是每一天的路程
那么考虑dp
dp[cur][i]=dp[cur-1][j]+(sum[i]-sum[j])^2
ans=dp[m][n]*m-sum[n]^2

斜率优化
dp[j]+(sum[i]-sum[j]-x)^2<=dp[k]+(sum[i]-sum[k]-x)^2
dp[j]-2*(sum[i]-x)*sum[j]+sum[j]^2
<=dp[k]-2*(sum[i]-x)*sum[k]+sum[k]^2
2*sum[i]>=
(dp[j]-dp[k]+sum[j]^2-sum[k]^2)/(sum[j]-sum[k])

 #include<cstdio>
const int MAXN=3e3+;
int n,m;
int s[MAXN];
int q[MAXN],l,r;
long long f[MAXN][MAXN];
double count_y(int k,int j){return f[k][j-]+s[k]*s[k];}
double count(int t,int k,int j){return (count_y(t,j)-count_y(k,j))/(s[t]-s[k]);}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
{
int x;
scanf("%d",&x);
s[i]=s[i-]+x;
}
for(int i=;i<=n;++i)f[i][]=s[i]*s[i];
for(int j=;j<=m;++j)
{
l=,r=;
for(int i=;i<=n;++i)
{
while(l<r&&count(q[l],q[l+],j)<*s[i])++l;
int temp=q[l];
f[i][j]=f[temp][j-]+(s[i]-s[temp])*(s[i]-s[temp]);
while(l<r&&count(q[r],i,j)<count(q[r-],q[r],j))--r;
q[++r]=i;
}
}
printf("%lld\n",f[n][m]*m-(long long)s[n]*s[n]);
return ;
}

bzoj4518[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

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

  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]征途-斜率优化

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

  6. [SDOI2016]征途 —— 斜率优化DP

    时隔多年没有碰斜率优化了... 想当年被斜率优化虐的死去活来,现在看看...也就那样吧. Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计 ...

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

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

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

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

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

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

随机推荐

  1. io多路复用(一)

    sever端 1 import socket sk1 = socket.socket() sk1.bind(('127.0.0.1',8001,)) sk1.listen() sk2 = socket ...

  2. Cypher语法

    cypher是neo4j官网提供的声明式查询语言,非常强大,用它可以完成任意的图谱里面的查询过滤,我们知识图谱的一期项目 基本开发完毕,后面会陆续总结学习一下neo4j相关的知识.今天接着上篇文章来看 ...

  3. Spring Cache扩展:注解失效时间+主动刷新缓存(二)

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  4. 第四章 JavaScript操作DOM对象

    第四章   JavaScript操作DOM对象 一.DOM操作 DOM是Document Object Model的缩写,即文档对象模型,是基于文档编程的一套API接口,1988年,W3C发布了第一级 ...

  5. Python内置函数(13)——bytearray

    英文文档: class bytearray([source[, encoding[, errors]]]) Return a new array of bytes. The bytearray cla ...

  6. iot前台开发环境:请求示例

    参考链接:http://www.cnblogs.com/keatkeat/category/872790.html 编辑->update保存 一.typescipt import { Injec ...

  7. Linux CentOS7.0 (01)在Vmvare Workstation上 安装配置

    一.新建虚拟机 1.创建新的虚拟机 -> 默认典型 ->选择安装介质 2.指定虚拟机名称.安装目录.磁盘容量大小 点击 "完成",创建虚拟机! 随后虚拟机将自动启动安装 ...

  8. Jetty入门(1-3)Eclipse集成gradle-Gretty插件或maven-jetty插件运行应用

    英文来源:  http://akhikhl.github.io/gretty-doc/Getting-started.html 一.gradle插件 1.使用gretty来运行jetty: gradl ...

  9. ubuntu16.04下安装chrome

    1.在终端中,输入以下命令: sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.l ...

  10. read运行

    #_*_ coding:utf-8 _*_ from sys import argv from os.path import exists   script, from_file, to_file = ...