【题解】[SDOI2016]征途
题目大意:给定序列,将它划分为\(m\)段使得方差最小,输出\(s^2*m^2\)(一个整数)。
\(\text{Solution:}\)
这题我通过题解中的大佬博客学到了一般化方差柿子的写法。
下面来推柿子:
\]
\]
化简得到:
\]
两边乘以\(n^2\)得到:
\]
其中\(sum\)是前缀和。最后这个柿子里面,\(n,sum\)都是常数,最终要处理的就是\(\sum_{i=1}^n x_i^2\).
设\(dp[i][l]\)表示前\(i\)个元素划分\(l\)次的最小平方和,有:
\]
\]
\]
\]
最终目的最小化\(dp[i][l]\)这里就是最小化\(b\),观察到\(2sum[i]\)这个斜率单调递增,所以我们维护所有大于这个斜率的决策点,做到\(O(n).\)
对于这个题,还可以滚动数组优化,虽然这里不需要。
几个实现细节:前\(i\)个元素可以划分成\(i\)段,所以每次枚举起点,它的决策起点应该是划分段数\(-1\),开始应该是划分段数对应的元素数。因为再往前往后都会导致不合法。
写\(\text{slope}\)的时候最好用\(\text{long double}\).顺序不要搞反。当然这个题主要难点是推方差柿子……\(\text{WCSL.}\)
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,a[20010],sum[20010];
int dp[4000][4000],tail,head;
int q[200010];
int X(int x){return sum[x];}
int Y(int x,int p){return dp[x][p-1]+sum[x]*sum[x];}
long double slope(int x,int y,int p){return (long double)(Y(y,p)-Y(x,p))/(X(y)-X(x));}
//dp[i][l]=dp[j][l-1]+(sum[i]-sum[j])^2
signed main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;++i)scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i],dp[i][1]=sum[i]*sum[i];
for(int p=2;p<=m;p++){
head=tail=1;
q[head]=p-1;
for(int i=p;i<=n;++i){
while(head<tail&&slope(q[head],q[head+1],p)<2.0*sum[i])head++;
dp[i][p]=dp[q[head]][p-1]+(sum[i]-sum[q[head]])*(sum[i]-sum[q[head]]);
while(head<tail&&slope(q[tail-1],q[tail],p)>slope(q[tail-1],i,p))tail--;
q[++tail]=i;
}
}
printf("%lld\n",m*dp[n][m]-sum[n]*sum[n]);
return 0;
}
附上推柿子时\(\text{word}\)上的东西:
\(Dp[i][l]=dp[j][l-1]+(sum[i]-sum[j])^2\)
\(Dp[i]][l]=dp[j][l-1]+sum[i]^2+sum[j]^2-2sum[i]sum[j]\)
\(Dp[j][l-1]+sum[j]^2=2sum[i]sum[j]+dp[i][l]-sum[i]^2\)
\(Y=dp[j][l-1]+sum[j]^2,k=2sum[i],x=sum[j],b=dp[i][l]-sum[i]^2\)
最小化\(b\),即可
\(Ans=-sum[n]^2+m*dp[n][m]\)
【题解】[SDOI2016]征途的更多相关文章
- 题解-[SDOI2016]征途
[SDOI2016]征途 [SDOI2016]征途 给定长度为 \(n\) 的序列 \(a\{n\}\),将其分为连续 \(m\) 段,和分别为 \(v\{m\}\).\(v\{m\}\) 的方差为 ...
- 斜率优化入门学习+总结 Apio2011特别行动队&Apio2014序列分割&HZOI2008玩具装箱&ZJOI2007仓库建设&小P的牧场&防御准备&Sdoi2016征途
斜率优化: 额...这是篇7个题的题解... 首先说说斜率优化是个啥,额... f[i]=min(f[j]+xxxx(i,j)) ; 1<=j<i (O(n^2)暴力)这样一个式子,首 ...
- 【BZOJ4518】[Sdoi2016]征途 斜率优化
[BZOJ4518][Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除 ...
- bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)
题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...
- 动态规划(决策单调优化):BZOJ 4518 [Sdoi2016]征途
4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 532 Solved: 337[Submit][Status][ ...
- BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]
4518: [Sdoi2016]征途 题意:\(n\le 3000\)个数分成m组,一组的和为一个数,求最小方差\(*m^2\) DP方程随便写\(f[i][j]=min\{f[k][j-1]+(s[ ...
- bzoj4518[Sdoi2016]征途 斜率优化dp
4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1657 Solved: 915[Submit][Status] ...
- BZOJ_4518_[Sdoi2016]征途_斜率优化
BZOJ_4518_[Sdoi2016]征途_斜率优化 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到 ...
- luoguP4072 [SDOI2016]征途
[SDOI2016]征途 大体 大概就是推推公式,发现很傻逼的\(n^3\)DP get60 进一步我们发现状态不能入手,考虑优化转移 套个斜率优化板子 每一层转移来一次斜率优化 思路 先便便式子 \ ...
- BZOJ4518 Sdoi2016 征途 【斜率优化DP】 *
BZOJ4518 Sdoi2016 征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m ...
随机推荐
- Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能。
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能. 下面是一个效果图 ...
- laravel5Eloquent模型与数据表的创建
下面是有关管理员模型与表的创建 生成模型时同时生成数据库迁移文件 在生成的迁移文件中添加字段 运行命令行生成数据表 命令进行混合运用 生成工厂文件,数据填充文件 工厂模型代码 数据填充文件代码 数据填 ...
- P1090 合并果子(哈弗曼树)
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- Spark3.0YarnCluster模式任务提交流程源码分析
1.通过spark-submit脚本提交spark程序 在spark-submit脚本里面执行了SparkSubmit类的main方法 2.运行SparkSubmit类的main方法 3.调用doSu ...
- 如何建立一个完美的 Python 项目
原文地址:How to set up a perfect Python project 原文作者:Brendan Maginnis 译者:HelloGitHub-丫丫 校对者:HelloGitHub- ...
- 微信小程序(1)
微信小程序 什么是微信小程序? 微信小程序优点 跨平台 打开速度比h5快 不用下载 开发目录结构介绍 1. 小程序Pages目录说明 2. 工具文件夹 3. 全局文件 用法1 全局APP.json文件 ...
- 10.QT-QAudioOutput类使用
本章需要用到的类如下: QAudioDeviceInfo类提供音频输出设备 QAudioFormat类提供音频参数设置 QAudioOutput类提供了用于将PCM原始音频数据发送到音频输出设备的接口 ...
- 你还记得 Tomcat 的工作原理么
SpringBoot 就像一条巨蟒,慢慢缠绕着我们,使我们麻痹.不得不承认,使用了 SpringBoot 确实提高了工作效率,但同时也让我们遗忘了很多技能.刚入社会的时候,我还是通过 Tomcat 手 ...
- Traveling by Stagecoach(POJ 2686)
原题如下: Traveling by Stagecoach Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4494 Ac ...
- tcp、http 学习小结
tcp.http 学习小结 前言 最近因为cdn的一个问题,困扰了自己好久.因为需要统计网站访问的成功数,而且要求比较精确.目前的实现不能满足要求,因为没有区别访问成功与否,也没有对超时做处理.期间解 ...