[SDOI2016 Round1] 征途[斜率优化]
2225. [SDOI2016 Round1] 征途
★★★☆ 输入文件:menci_journey.in 输出文件:menci_journey.out 简单对比
时间限制:1 s 内存限制:256 MB
【题目描述】
Pine 开始了从 S 地到 T 地的征途。
从 S 地到 T 地的路可以划分成 n 段,相邻两段路的分界点设有休息站。
Pine 计划用 m 天到达 T 地。除第 m 天外,每一天晚上 Pine 都必须在休息站过夜。所以,一段路必须在同一天中走完。
Pine 希望每一天走的路长度尽可能相近,所以他希望每一天走的路的长度的方差尽可能小。
帮助 Pine 求出最小方差是多少。
设方差是 v,可以证明,v×m2 是一个整数。为了避免精度误差,输出结果时输出 v×m2。
【输入格式】
第一行两个数 n、m。
第二行 n 个数,表示 n 段路的长度。
【输出格式】
一个数,最小方差乘以 m2 后的值。
【样例输入】
5 2
1 2 5 8 6
【样例输出】
36
【提示】
对于 30% 的数据,1≤n≤10。
对于 60% 的数据,1≤n≤100。
对于 100% 的数据,1≤n≤3000。
保证从 S 到 T 的总路程不超过 30000。
【来源】
SDOI2016 Round1 Day2
数据已由出题人修正
我们把f[i][j]作为用过了第i次一共取了j个数的最小值.

斜率优化:

#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll; #define pf(x) ((x)*(x))
#define FRE(name) freopen(#name".in","r",stdin);freopen(#name".out","w",stdout);
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif const int N=;
int n,m,a[N],q[N];
ll ans,sum[N],f[N][N];
inline double get(int i,int x,int y){
return ((double)(f[i][x]-f[i][y]+pf(sum[x])-pf(sum[y])))/((double)(sum[x]-sum[y]));
}
int main(){
FRE(menci_journey);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]),sum[i]=sum[i-]+a[i];
memset(f,0x3f3f3f3f,sizeof f);
f[][]=;
for(int i=;i<=m;i++){
int h=,t=;
for(int j=;j<=n;j++){
while(h<t&&get(i-,q[h+],q[h])<(double)(sum[j]<<)) h++;//获取当前最优k
f[i][j]=f[i-][q[h]]+pf(sum[j]-sum[q[h]]);
while(h<t&&get(i-,q[t],q[t-])>get(i-,j,q[t])) t--;//维护min(slope)
q[++t]=j;
}
}
ans=f[m][n]*m-pf(sum[n]);
printf(LL,ans);
return ;
}
[SDOI2016 Round1] 征途[斜率优化]的更多相关文章
- P4072 [SDOI2016](BZOJ4518) 征途 [斜率优化DP]
题目描述 Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜.所以,一段路 ...
- 洛谷 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地 ...
- 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] ...
- 【BZOJ4518】[Sdoi2016]征途 斜率优化
[BZOJ4518][Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除 ...
- 【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都必须 ...
- [SDOI2016]征途 —— 斜率优化DP
时隔多年没有碰斜率优化了... 想当年被斜率优化虐的死去活来,现在看看...也就那样吧. Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计 ...
随机推荐
- Python的ipython的安装
IPython是Python 的原生交互式 shell 的增强版,可以完成许多不同寻常的任务,比如帮助实现并行化计算:主要使用它提供的交互性帮助,比如代码着色.改进了的命令行回调.制表符完成.宏功能以 ...
- unity, instantiate一个实例后,先指定parent,再指定position
instantiate一个实例后,先指定parent,再指定position,才能保证position正确,如果先指定position再指定parent,则position会错误.
- ui-router(三)controller与template
这篇就是在以前的基础上,把客户端angular.js 负责的部分整体串起来演示一下. 我们按照angular执行顺序来做前提准备: (1)Client 根目录下 index.html 首先加载angu ...
- Atitit.404错误解决标准流程and url汉字中文路径404错误resin4 resin chinese char path 404 err解决
Atitit.404错误解决标准流程and 错误resin4 resin chinese char path 404 err解决 1. #原因解析 1 2. #解决方式 2 3. 输出图片流... 2 ...
- atitit..sql update语法的词法分析,与语法ast构建
atitit..sql update语法的词法分析,与语法ast构建 1. 要使用sql udpate语法的dsl ,需要写个解释器.. 1 2. 词法分析的实现 1 2.1. 扫描器的实现 SqlU ...
- iOS之美: UIView 与 UIWindow之间的关系
转自:http://leopard168.blog.163.com/blog/static/168471844201381584533466/ 面对iOS初学者,总会被问到一些不常被关注的问题,比如: ...
- linux 终端 查看上一页
问题描述: 我在终端中使用”dpkg -l”命令显示主机中安装的软件时,发现内容很多,而当命令执行完毕后,只显示终端最后一屏的内容.前面的都无法查看,这个是很让人憋屈的.下面就这一个问题说一下我的解决 ...
- Struts2使用OGNL遍历各种map总结
一.Action中的代码:MapAction.java package com.zx.demo.action; import java.util.ArrayList; import java.ut ...
- Python @ddt.file_data() 为.yml 文件实例
一,创建login.yml 文件(以登录接口为例) 1,创建 login.yml 文件,内容如下图: 打印login.yml 文件,代码及显示效果如下: 代码: import yaml,jsonf = ...
- ubuntu 16.04LTS
安装出现"server64 busybox-initramfs安装失败" 这个是BUG,解决方法一:初次安装选择语言时,使用English,在后面还会有一个选择语言的界面,这时候再 ...