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

/*
先吐槽一波数据,n=2146,只有2143个数的输入也是没谁了,害的我找了半天错误!
设m天走过的路程分别是a1,a2...am,平均数为p=dis[n]/m
化简一波式子 ans=Σ((ai-p)*(ai-p))*m*m=m*Σ(ai*ai)-dis[n]*dis[n]
f[i][j]表示第i天走到j地的最小 Σai*ai
首先求出动态转移方程 f[i][j]=min(f[i][k]+(dis[j]-dis[k])^2)
可以斜率优化,化简上式可得,若k1比k2更优,则有:
(dis[k1]^2-dis[k2]^2+f[i-1][k1]-f[i-1][k2])/(dis[k1]-dis[k2])>dis[j]*2
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#define N 3010
#define lon long long
using namespace std;
lon dis[N],f[N][N];int n,m,q[N];
lon read(){
lon num=,flag=;char c=getchar();
while(c<''||c>''){if(c=='-')flag=-;c=getchar();}
while(c>=''&&c<=''){num=num*+c-'';c=getchar();}
return num*flag;
}
double lv(int i,int k1,int k2){
return double(dis[k1]*dis[k1]-dis[k2]*dis[k2]+f[i-][k1]-f[i-][k2])/double(dis[k1]-dis[k2]);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
int x=;scanf("%d",&x);
dis[i]=dis[i-]+(lon)x;
}
memset(f,/,sizeof(f));
int h,t;f[][]=;
for(int i=;i<=m;i++){
h=;t=;q[]=;
for(int j=;j<=n;j++){
while(h<t&&lv(i,q[h+],q[h])<=dis[j]*)
h++;
f[i][j]=f[i-][q[h]]+(dis[j]-dis[q[h]])*(dis[j]-dis[q[h]]);
while(h<t&&lv(i,j,q[t])<=lv(i,q[t],q[t-])) t--;
q[++t]=j;
}
}
cout<<f[m][n]*m-dis[n]*dis[n];
return ;
}

最新文章

  1. php中echo(),print(),print_r(),var_dump()间的区别
  2. SQLite剖析之异步IO模式、共享缓存模式和解锁通知
  3. U盘的不识别问题
  4. Sparse Filtering 学习笔记(二)好特征的刻画
  5. Tools - 国内开源镜像网站
  6. js笔记---(运动)通用的move方法,兼容透明度变化
  7. c# 客户端
  8. 学习js之类的使用
  9. [汇编学习笔记][第十三章int指令]
  10. 观点:哪些人适合做FPGA开发?(转)
  11. WinMerge文件编码设置
  12. javaOOP-基础知识
  13. 正则验证,match()与test()函数的区别?
  14. 在C#中“?”有三种用法
  15. java第八章JDBC
  16. CHENGDU1-Python编程语言和PEP8规范
  17. nasm学习资料
  18. wampServer 安装 Redis 扩展
  19. (记忆化搜索)Jury Compromise (poj 1015)
  20. jsp学习小记

热门文章

  1. COGS 2566. [51nod 1129] 字符串最大值
  2. 成魔笔记1——先入IT,再成魔
  3. UVA - 12264 Risk (二分,网络流)
  4. C++数据文件存储与加载(利用opencv)
  5. Ubuntu 16.04下Java环境安装与配置
  6. HTML之网页的基本介绍
  7. chrom控制台常用方法
  8. iOS开发各种证书问题
  9. js中声明函数的三种方式
  10. (21)zabbix创建触发器trigger