题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4518

题目大意:

相当于:n个数字,将其分成m段,每段的数字和为该段的值,使方差最小..

===========================================

题解:

斜率优化【mdzz啊(口亨一定是题目表述不清!!!搞了我那么久

因为分成的段数的固定的,那么平均数sm也是固定的(这里的sum为总和)

所以方程很容易写到:

f[k][i]=f[k-1][j]+(sum[i]-sum[j]-sm)^2;

(设f[k][i]为以i为结尾已经分成了k段,sum[i]为前缀和)

-> 2*(sum[i]-sm)*sum[j]+f[k][i]=f[k-1][j]+sum[j]^2 +(sum[i]-sm)^2;

于是截距式就出来了,斜率优化QwQmd自己好zz

因为答案要乘上m^2,所以把m^2直接乘丢到式子里,即将所有数都先*m,最后再除个m,化简过程可以自己试试。

习惯了这种二维搞滚动orz不搞应该也行....吧日常LL咯~(我已经不管究竟要不要了= =反正又不会爆233

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
#define maxn 31000int l,r,q[maxn],t;
LL sum[maxn],a[maxn],f[2][maxn];
LL sqrr(LL x){return x*x;}
double X(int j){return sum[j];}
double Y(int j){return f[1-t][j]+sqrr(sum[j]);}
double slop(int j1,int j2) {return (Y(j2)-Y(j1))/(X(j2)-X(j1));}
int main()
{int n,m,i,k;LL sm;sm=sum[0]=0;scanf("%d%d",&n,&m);for (i=1;i<=n;i++){scanf("%lld",&a[i]);sm+=a[i];a[i]*=m;sum[i]=sum[i-1]+a[i];}t=1;memset(f,63,sizeof(f));f[0][0]=0;for (i=1;i<=n;i++) f[0][i]=sqrr(sum[i]-sm);for (k=1;k<=m;k++){l=r=1;q[l]=0;memset(f[t],63,sizeof(f[t]));for (i=1;i<=n;i++){while (l<r && slop(q[l],q[l+1])<(sum[i]-sm)*2) l++;int j=q[l];f[t][i]=f[1-t][j]+sqrr(sum[i]-sum[j]-sm);while (l<r && slop(q[r-1],q[r])>slop(q[r],i)) r--;q[++r]=i;}t=1-t;}printf("%lld\n",f[1-t][n]/m);return 0;
}

bzoj4518[Sdoi2016] 征途相关推荐

  1. [BZOJ4518][SDOI2016]征途[斜率优化]

    王道征途 \[ \text{题目要求的东西可以化成}m\times \sum_{i=1}^m{d\left[ i \right] ^2-pre\left[ n \right] ^2} \\ \text ...

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

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

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

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

  4. 洛谷4072 SDOI2016征途 (斜率优化+dp)

    首先根据题目中给的要求,推一下方差的柿子. \[v\times m^2 = m\times \sum x^2 - 2 \times sum \times sum +sum*sum\] 所以\(ans ...

  5. 【BZOJ4518】征途,斜率优化DP

    写在前面:当时考场上想到了搞一个二维队列记录上次的函数值,但莫名就感觉这样和N^3做法没有区别(这告诉我们当你写出部分分而且还有大把的时间时就不要放弃写标算的希望),就弃疗了,不过就算搞出来了应该也不 ...

  6. 洛谷P4072 [SDOI2016]征途(带权二分,斜率优化)

    洛谷题目传送门 一开始肯定要把题目要求的式子给写出来 我们知道方差的公式\(s^2=\frac{\sum\limits_{i=1}^{m}(x_i-\overline x)^2}{m}\) 题目要乘\ ...

  7. P4072 [SDOI2016]征途

    文章目录 R e s u l t Result Result H y p e r l i n k Hyperlink Hyperlink D e s c r i p t i o n Descripti ...

  8. bzoj4518【SDOI2016】征途

    4518: [Sdoi2016]征途 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 452   Solved: 295 [ Submit][ St ...

  9. confluence添加用户_Confluence 6 选项 1 – 在 Confluence 中手动重建用户和用户组

    dojo 六 使用query dojo/query 要使用query,就要引入dojo/query包.query可以根据Dom里节点的标签名.id名.class名来检索一个或多个节点.-------- ...

最新文章

  1. 《用Python进行自然语言处理》第7章 从文本提取信息
  2. [bzoj 2434][Noi2011]阿狸的打字机
  3. 虚拟化,可实现国产化替代
  4. 【团队建设问题】项目管理方面
  5. thinkphp的select和find的区别(转)
  6. win10创建c语言文件,c – 如何在Windows中创建扩展(自定义)文件属性?
  7. linux band0 手动重启,band,call,apply的区别以及手动封装
  8. android 手环获取步数_荣耀手环5 篮球版深度体验:专业数据精细到“毛孔”
  9. aes key长度_AES加密(1): 基本AES算法
  10. DMA流程简介--CPU/内存/网卡之间的交互
  11. 【君思智慧园区】智慧能源综合管理平台,智慧能源管理云平台建设方案!
  12. 开源GIS与空间数据库实战教程
  13. 文件mime类型大全
  14. 矩阵理论第一章—线性空间与子空间,空间分解与维数定理
  15. 十分nb且详细的Elasticsearch教程
  16. 5.4 微程序控制器
  17. 笔记本打开腾讯会议显示未检测到可用摄像头,但是系统自带相机可以使用
  18. 视频教程-Excel玩转财务管理-Office/WPS
  19. 《面朝大海,春暖花开》(海子)
  20. Linux下刻录光盘

热门文章

  1. 【Electron】Electron开发入门(五):项目打包
  2. 我对珊瑚虫事件的一点想法
  3. 问道虚拟机服务器地址,问道单机免虚拟机1.64一键端(图文)
  4. w7找不到本地计算机,Win7本地连接不见了怎么办?
  5. 2019 第一季度总结
  6. linux 划分两个VDisk,HP-UNIX.关于LUN,Vdisk,VG,LV,挂载点,设备文件等查询实例描述 -- 转载...
  7. MATLAB生成随机点
  8. 麻省理工公开课:线性代数 正交向量与子空间
  9. Chrome太占内存怎么办?试试这个
  10. 《打领带的十种方法》