[SDOI2015][bzoj4518] 征途 [斜率优化dp]
题面
思路
把$vm^2$展开化一下式子,可以得到这样的等价公式:
$vm2=m\sum_{i=1}m a_i2-\sum_{i=1}m a_i$
那么我们要最小化的就是$\sum_{i=1}^m a_i^2$这个东西
设$dp[i][j]$表示前i段路程走了j天
转移显然:$dp[i][j]=min(dp[k][j-1]+dis(k,i)^2)(k=1...i-1)$
这就是个模板的斜率优化dp了
总复杂度$O(nm)$
Code:
写代码的时候需要注意一点:当前这一层的状态,要等到这一层(同一个i)都推完了,再一起入队,不然容易互相之间造成影响,导致WA
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
inline int read(){
int re=0,flag=1;char ch=getchar();
while(ch>'9'||ch<'0'){
if(ch=='-') flag=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') re=(re<<1)+(re<<3)+ch-'0',ch=getchar();
return re*flag;
}
int n,m,a[3010],q[3010][3010],l[3010]={0},r[3010]={0},maxq=3000;
ll dp[3010][3010],pre[3010];
ll up(int x,int y,int k){
return dp[x][k]-dp[y][k]+pre[x]*pre[x]-pre[y]*pre[y];
}
ll down(int x,int y,int k){
return 2ll*(pre[x]-pre[y]);
}
int main(){
n=read();m=read();int i,j;
for(i=1;i<=n;i++) a[i]=read(),pre[i]=pre[i-1]+a[i];
q[0][r[0]++]=0;
for(i=1;i<=n;i++){
for(j=max(1,m+i-n)-1;j<i;j++){//先取得状态
while(l[j]<r[j]-1&&up(q[j][l[j]+1],q[j][l[j]],j)<down(q[j][l[j]+1],q[j][l[j]],j)*(ll)pre[i]) q[j][l[j]++]=0;
dp[i][j+1]=dp[q[j][l[j]]][j]+(pre[i]-pre[q[j][l[j]]])*(pre[i]-pre[q[j][l[j]]]);
}
for(j=max(1,m+i-n);j<=i;j++){//分开入队
while(l[j]<r[j]-1&&up(i,q[j][r[j]-1],j)*down(q[j][r[j]-1],q[j][r[j]-2],j)<=down(i,q[j][r[j]-1],j)*up(q[j][r[j]-1],q[j][r[j]-2],j)) q[j][--r[j]]=0;
q[j][r[j]++]=i;
}
}
ll ans=0,mm=m;
ans=mm*dp[n][m]-pre[n]*pre[n];
cout<<ans;
}
[SDOI2015][bzoj4518] 征途 [斜率优化dp]的更多相关文章
- 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地 ...
- bzoj4518[Sdoi2016]征途 斜率优化dp
4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1657 Solved: 915[Submit][Status] ...
- 【bzoj4518】[Sdoi2016]征途 斜率优化dp
原文地址:http://www.cnblogs.com/GXZlegend/p/6812435.html 题目描述 Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界 ...
- BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]
4518: [Sdoi2016]征途 题意:\(n\le 3000\)个数分成m组,一组的和为一个数,求最小方差\(*m^2\) DP方程随便写\(f[i][j]=min\{f[k][j-1]+(s[ ...
- bzoj4518征途 斜率优化
征途这是一道十分经典的斜率优化 我们可以从题目中的方差来想,也就很容易的到这个式子 \[ans=m^2*\frac{\sum_{i=1}^{m}{(x_i-{\overline{x}})^2}}{m} ...
- [SDOI2016]征途 —— 斜率优化DP
时隔多年没有碰斜率优化了... 想当年被斜率优化虐的死去活来,现在看看...也就那样吧. Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计 ...
- 斜率优化dp 的简单入门
不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294 ...
随机推荐
- 由fastRPC产生的DB服务
根据整理的RPC模型,在此上,根据最近的项目,发布了DB服务,操作数据库.以RPC模型,发布数据库的操作服务,主要发送SQL语句,在服务端执行:同时引入了流行的数据库连接池:服务端还发布了文件接收服务 ...
- JavaScript的变量命名规则和关键字的介绍
变量的名字 就像 人的名字一样,不能乱起. 你的代码不是只有你一个人看,变量既然是名字,那就这个名字就要有特殊的意义: 举个栗子:翠花,我们能从这个名字中得到什么信息?(这个 ...
- github上更新fork项目
转载:https://blog.csdn.net/qq1332479771/article/details/56087333 ps:需要用GitHub所指定的chrome或者firefox浏览器,其它 ...
- lintcode_177_把排序数组转换为高度最小的二叉搜索树
把排序数组转换为高度最小的二叉搜索树 描述 笔记 数据 评测 给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树. 注意事项 There may exist multiple vali ...
- centOS初了解--***安装node
在***买了一个VPS,用了差不多一年了,除了做FQ使用之外,同时也下载了一个node,用了express搭建了一个服务,同时我在博客园有博客,我也懒得转来转去了,直接做了一个重定向,跳转到了博客园. ...
- linux学习笔记二:三种网络配置
本文引用自:https://www.linuxidc.com/Linux/2017-05/144370.htm [linux公社] VMware为我们提供了三种网络工作模式,它们分别是:Bridged ...
- lnamp高性能架构之apache和nginx的整合
搭建过lamp博友和lnmp的博友们可能对这这两个单词并不陌生,对与apachen,nginx相比都源码或yum安装过,但知道apache的nginx的优点,apache处理动态页面很强,nginx处 ...
- JQ常用方法(哈哈)
1ajax请求 $(function(){ $("#send").click(function(){ $.ajax({ type:"get" ...
- Python 编码格式的使用
编码史 ASCII > Unicode > UTF-8 Unicode支持多语言,UTF-8自动转换长短细节节省空间 在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传 ...
- C# 禁止在textBox输入框输入非法字符
首先添加下面代码 //禁止在textBox输入框输入非法字符 private void keypressed(Object o, KeyPressEventArgs e) { if (e.KeyCha ...