【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 ...
随机推荐
- 【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)
1 引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...
- python 播放 wav 文件
未使用其他库, 只是使用 pywin32 调用系统底层 API 播放 wav 文件. # Our raison d'etre - playing sounds import pywintypes im ...
- 扩展 easyui-tabs 插件 关闭标签页方法
$.extend($.fn.tabs.methods,{ allTabs:function(jq){ var tabs = $(jq).tabs('tabs'); var all = []; all ...
- python动态网页爬取——四六级成绩批量爬取
需求: 四六级成绩查询网站我所知道的有两个:学信网(http://www.chsi.com.cn/cet/)和99宿舍(http://cet.99sushe.com/),这两个网站采用的都是动态网页. ...
- php缓存技术(减少数据库服务器压力)
静态缓存(保存在磁盘上的静态文件,用PHP生成数据放入静态文件中) a) php操作缓存 i. 生成缓存 ii. 获取缓存 iii. 删除缓存 判断目录是否存在:is_dir() dirname ...
- 基于Html5缓存的页面P2P技术可行性探讨
P2P技术,在分享大文件(你懂的)是现在必不可缺的技术,现在的人,已经很难想象在没有这玩意的互联网早期,人们是怎样的艰难求生.想当年,不要说电影,下一个稍大点的文件,都是很吃力的事情. 后来牛人科恩, ...
- ServiceStack 概念参考文摘
摘自:http://www.cnblogs.com/woxpp/p/5010881.html ServiceStack 用于服务开发,可以为各种形式的网站.软件.APP等提供数据服务,可以提供REST ...
- js中奇特的for循环写法
//正常的for循环 for(var i=0;i<10;i++){ console.log(i); } //输出:1,2,3……10 //简写 for(var i=10;i--;){ conso ...
- springMvc接受日期类型参数处理
这个问题,也即是springMvc如何进行参数类型的转换 以把client传过来一个String类型,转换为日期类型为例: 1.controller /** * 接收日期类型参数 * 注意: * sp ...
- asp.net MVC添加HtmlHelper扩展示例和用法
一.先创建一个HtmlHelper的扩展类,代码: using System; using System.Collections.Generic; using System.Linq; using S ...