【BZOJ-4518】征途 DP + 斜率优化
4518: [Sdoi2016]征途
Time Limit: 10 Sec Memory Limit: 256 MB
Submit:
230 Solved: 156
[Submit][Status][Discuss]
Description
Input
Output
一个数,最小方差乘以 m^2 后的值
Sample Input
1 2 5 8 6
Sample Output
HINT
1≤n≤3000,保证从 S 到 T 的总路程不超过 30000
Source
Solution
DP + 斜率优化
首先对所求的东西进行一下化简:
即最后的结果为$m*\sum_{i=1}^{m}x_{i}^{2}-\sum_{i=1}^{m}x_{i}$其中$x_{i}$表示第$i$天走的路段总和
很显然有$\sum_{i=1}^{m}x_{i}$为定值,那么只需要最小化$\sum_{i=1}^{m}x_{i}^{2}$
那么考虑$f[i][j]$表示$i$天共走了$j$段路的最优
首先可以有某天停滞不前,那么很容易发现,若要最优,则不可能停滞不前
可以得到转移$dp[i][j]=min(dp[i][j],dp[i-1][j-k]+(sum[j]-sum[j-k])^{2}),k=1-j$
那么固定下$i$后,很显然对于$j$是满足斜率优化的
那么化简就可以得到$\frac{dp[i-1][k_{1}]+sum[k_{1}]^{2}-dp[i-1][k_{2}]-sum[k_{2}]^{2}}{sum[k_{1}]-sum[k_{2}]}<2*sum[j]$
那么斜率优化即可,自己还打了个滚动数组,不过貌似毫无意义
Code
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
inline int read()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
#define maxn 3010
int n,m; int dis[maxn],que[maxn],l,r;
long long dp[][maxn],sum[maxn];
long long pf(long long x) {return x*x;}
inline double slope(int t,int i,int j)
{
return (double)(dp[t][i]+pf(sum[i])-dp[t][j]-pf(sum[j]))/(double)(sum[i]-sum[j]);
}
int main()
{
n=read(),m=read();
for (int i=; i<=n; i++) dis[i]=read(),sum[i]=sum[i-]+dis[i];
memset(dp,,sizeof(dp)); dp[][]=;
for (int t=,i=; i<=m; i++,t^=,l=r=)
for (int tmp,j=; j<=n; j++)
{
while (l<r && slope(t^,que[l],que[l+])<(sum[j]<<)) l++;
tmp=que[l];
dp[t][j]=pf(sum[j]-sum[tmp])+dp[t^][tmp];
while (l<r && slope(t^,que[r],que[r-])>slope(t^,que[r],j)) r--;
que[++r]=j;
}
printf("%lld\n",m*dp[m&][n]-pf(sum[n]));
return ;
}
在BZOJ上好像排名不高啊....
【BZOJ-4518】征途 DP + 斜率优化的更多相关文章
- BZOJ - 4518: 征途(斜率优化,求N数划分为M区间的最小方差)
注意初始化...等等补 #include<bits/stdc++.h> #define ll long long using namespace std; ; int q[maxn],he ...
- BZOJ.4072.[SDOI2016]征途(DP 斜率优化)
题目链接 题目要求使得下面这个式子最小(\(\mu=\frac{\sum_{i=1}^ma_i}{m}\)是平均数,\(a_i\)为第\(i\)段的和): \[\frac{\sum_{i-1}^m(\ ...
- BZOJ 3156: 防御准备( dp + 斜率优化 )
dp(i)表示处理完[i,n]且i是放守卫塔的最小费用. dp(i) = min{dp(j) + (j-i)(j-i-1)/2}+costi(i<j≤N) 然后斜率优化 ------------ ...
- BZOJ4518: [Sdoi2016]征途(dp+斜率优化)
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1875 Solved: 1045[Submit][Status][Discuss] Descript ...
- 【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=1096 首先得到dp方程(我竟然自己都每推出了QAQ)$$d[i]=min\{d[j]+cost(j+ ...
- BZOJ 1096: [ZJOI2007]仓库建设(DP+斜率优化)
[ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在 ...
- 【BZOJ-3437】小P的牧场 DP + 斜率优化
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 705 Solved: 404[Submit][Status][Discuss ...
- BZOJ 1767] [Ceoi2009] harbingers (斜率优化)
[BZOJ 1767] [Ceoi2009] harbingers (斜率优化) 题面 给定一颗树,树中每个结点有一个邮递员,每个邮递员要沿着唯一的路径走向capital(1号结点),每到一个城市他可 ...
- 【BZOJ-1010】玩具装箱toy DP + 斜率优化
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8432 Solved: 3338[Submit][St ...
随机推荐
- matlab:启动后无法调用工具包
matlab有时候一打开会出现warning,然后任何工具包(包括set path)都执行不了,在网上找到解决方法,存下来备用. 1. 在matlab的command里输入: restoredefau ...
- Android项目,从web上取下汉字,中文部分乱码
Android项目,从web上取下汉字,中文部分乱码. 常见问题,搜索一下,网上有很多办法解决.如果还没有试过这个办法,可以尝试一下. BufferedReader in = new Buffered ...
- CefSharp的引用、配置、实例
CefSharp的引用.配置.实例与报错排除(源码) Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfro ...
- 工作随笔——mysql子查询删除原表数据
最近在开发的时候遇到一个mysql的子查询删除原表数据的问题.在网上也看了很多方法,基本也是然并卵(不是写的太乱就是效率太慢). 公司DBA给了一个很好的解决方案,让人耳目一新. DELETE fb. ...
- 更好的逐帧动画函数 — requestAnimationFrame 简介
本文将会简单讲讲 requestAnimationFrame 函数的用法,与 setTimeout/setInterval 的区别和联系,以及当标签页隐藏时 requestAnimationFrame ...
- c#类库和可移值类库的区别
所谓类库,只能指定一个类库的可运行平台. 而可移值类库,可以在无需修改代码的情况,同时可以在多平台上运行DLL文件.多平台如NET Framework.Silverlight.Windows Phon ...
- 【BZOJ1003】【ZJOI2006】物流运输
1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2556 Solved: 1008[Submit] ...
- kmp模板,线性完成pos
var p:..] of longint; i,j:longint; a,b:ansistring; begin readln(a); readln(b); P[]:=; j:=; to length ...
- 根本没有“JSON“对象这回事(读汤姆大叔博文记录)
1.字面量 (1)他们是固定的值,不是变量,让你从“字面上”理解脚本. (2)字符串字面量是由双引号("")或单引号('')包围起来的零个或多个字符串组成的. (3)对象字面量是由 ...
- 曼慧尼特u检验(两个样本数据间有无差异)
曼-惠特尼U检验(Mann-Whitney检验) How the Mann-Whitney test works Mann-Whitney检验又叫做秩和检验,是比较没有配对的两个独立样本的非参数检验. ...