2018.09.08 bzoj4518: [Sdoi2016]征途(斜率优化dp)
传送门
把式子展开后发现就是要求:
m∗(∑i=1msum′[i])−sum[n]2" role="presentation" style="position: relative;">m∗(∑mi=1sum′[i])−sum[n]2m∗(∑i=1msum′[i])−sum[n]2的最小值。
于是只需要求:
m∗(∑i=1msum′[i])" role="presentation" style="position: relative;">m∗(∑mi=1sum′[i])m∗(∑i=1msum′[i])的最小值。
于是设f[i][j]" role="presentation" style="position: relative;">f[i][j]f[i][j]表示前i个分了j组的最小值。
显然有:
f[i][j]=min(f[k][j−1]+(sum[i]−sum[k])2)" role="presentation" style="position: relative;">f[i][j]=min(f[k][j−1]+(sum[i]−sum[k])2)f[i][j]=min(f[k][j−1]+(sum[i]−sum[k])2)
<=>
f[i][j]=min(f[k][j−1]+sum[k]2−2sum[i]∗sum[k])+sum[i]2" role="presentation" style="position: relative;">f[i][j]=min(f[k][j−1]+sum[k]2−2sum[i]∗sum[k])+sum[i]2f[i][j]=min(f[k][j−1]+sum[k]2−2sum[i]∗sum[k])+sum[i]2
对于两个决策k1<k2" role="presentation" style="position: relative;">k1<k2k1<k2且k2比k1更优,有:
f[k1][j−1]+sum[k1]2−2sum[i]∗sum[k1]" role="presentation" style="position: relative;">f[k1][j−1]+sum[k1]2−2sum[i]∗sum[k1]f[k1][j−1]+sum[k1]2−2sum[i]∗sum[k1]
>
f[k2][j−1]+sum[k2]2−2sum[i]∗sum[k2]" role="presentation" style="position: relative;">f[k2][j−1]+sum[k2]2−2sum[i]∗sum[k2]f[k2][j−1]+sum[k2]2−2sum[i]∗sum[k2]
令t[k]=f[k][j−1]+sum[k]2" role="presentation" style="position: relative;">t[k]=f[k][j−1]+sum[k]2t[k]=f[k][j−1]+sum[k]2
=>
(t[k1]−t[k2])/(sum[k1]−sum[k2])<2sum[i]" role="presentation" style="position: relative;">(t[k1]−t[k2])/(sum[k1]−sum[k2])<2sum[i](t[k1]−t[k2])/(sum[k1]−sum[k2])<2sum[i]
果断斜率优化。
代码:
#include<bits/stdc++.h>
#define ll long long
#define N 3005
using namespace std;
inline ll read(){
ll ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int n,m,hd,tl,q[N];
ll sum[N],f[N][N];
inline double slope(int k,int i,int j){return 1.0*(f[i][k]+sum[i]*sum[i]-f[j][k]-sum[j]*sum[j])/(sum[i]-sum[j]);}
int main(){
n=read(),m=read();
for(int i=1;i<=n;++i)sum[i]=sum[i-1]+read(),f[i][0]=1e18;
for(int j=1;j<=m;++j){
hd=tl=1,q[1]=0;
for(int i=1;i<=n;++i){
while(hd<tl&&slope(j-1,q[hd+1],q[hd])<2.0*sum[i])++hd;
int k=q[hd];
f[i][j]=f[k][j-1]+(sum[i]-sum[k])*(sum[i]-sum[k]);
while(hd<tl&&slope(j-1,q[tl],q[tl-1])>slope(j-1,i,q[tl]))--tl;
q[++tl]=i;
}
}
cout<<(m*f[n][m]-sum[n]*sum[n]);
return 0;
}
2018.09.08 bzoj4518: [Sdoi2016]征途(斜率优化dp)的更多相关文章
- bzoj4518[Sdoi2016]征途 斜率优化dp
4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1657 Solved: 915[Submit][Status] ...
- 洛谷 P4072 [SDOI2016]征途 斜率优化DP
洛谷 P4072 [SDOI2016]征途 斜率优化DP 题目描述 \(Pine\) 开始了从 \(S\) 地到 \(T\) 地的征途. 从\(S\)地到\(T\)地的路可以划分成 \(n\) 段,相 ...
- bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)
题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...
- 2018.09.05 任务安排(斜率优化dp)
描述 这道题目说的是,给出了n项必须按照顺序完成的任务,每项任务有它需要占用机器的时间和价值.现在我们有一台机器可以使用,它每次可以完成一批任务,完成这批任务所需的时间为一个启动机器的时间S加上所有任 ...
- 【bzoj4518】[Sdoi2016]征途 斜率优化dp
原文地址:http://www.cnblogs.com/GXZlegend/p/6812435.html 题目描述 Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界 ...
- [bzoj4518][Sdoi2016]征途-斜率优化
Brief Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须 ...
- BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]
4518: [Sdoi2016]征途 题意:\(n\le 3000\)个数分成m组,一组的和为一个数,求最小方差\(*m^2\) DP方程随便写\(f[i][j]=min\{f[k][j-1]+(s[ ...
- [SDOI2016]征途 —— 斜率优化DP
时隔多年没有碰斜率优化了... 想当年被斜率优化虐的死去活来,现在看看...也就那样吧. Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计 ...
- 2018.09.29 bzoj3156: 防御准备(斜率优化dp)
传送门 斜率dp经典题目. 然而算斜率的时候并没有注意到下标的平方会爆int于是咕咕*2. 这道题我用了两个数组来表示状态. f[i]f[i]f[i]表示最后i个位置倒数第i个放木偶的最优值. g[i ...
随机推荐
- node 把前台传来的base64码转成图片存放
最近做个人网站头像修改用到了,在做头像修改,先做了一个图片切割,只需要上传你选中部分, 如图 这种需求 应该还是会遇到的, http://pan.baidu.com/s/1boVkn1t 这是裁剪图片 ...
- background-image,background-repeat, background-position 实现点赞图片(一个图片的多次使用)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Gradle 语法
参考文章: Gradle学习系列之二——创建Task的多种方法(http://www.cnblogs.com/CloudTeng/p/3417970.html) Gradle基本知识点与常用配置(ht ...
- 基于OpenGL编写一个简易的2D渲染框架-12 重构渲染器-BlockAllocator
BlockAllocator 的内存管理情况可以用下图表示 整体思路是,先分配一大块内存 Chunk,然后将 Chunk 分割成小块 Block.由于 Block 是链表的一个结点,所以可以通过链表的 ...
- ABAP-SMARTFORMS
- DOM 练习
练习一: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- 大型运输行业实战_day04_3_高级查询+分页
1.高级查询+分页最终结果 2.分页的本质分析 前端传入:当前页 和 每页显示条数 数据库必须查询出:数据列表 和 总共条数 页面显示包括的数据有: 列表 + 每页显示条数 + 当前页 + 总共 ...
- Cache Server
[Cache Server] Whenever a source Asset like a .psd or an .fbx file is modified, Unity detects the ch ...
- Linux Shell 文本处理工具集锦(转载)
内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq 消除重复行 用tr进行转换 cut 按列切分文本 paste 按列拼接文本 wc 统计行和字符 ...
- 源码包的解压 .tar.gz /.tar.bz2的解压
解压方式如下: .tar.gz 格式解压为 tar -zxvf xx.tar.gz .tar.bz2 格式解压为 tar -jxvf ...