【BZOJ 4518】[Sdoi2016]征途
【链接】 链接
【题意】
在这里输入题意
【题解】
DP+斜率优化;
$D(x) = E(x^2)-E(x)^2$
其中$E(x)^2$这一部分是确定的。
因为总长是确定的,分成的段数又是确定的。
所以我们只要维护$E(x^2)$这一部分最小就可以了。
而最后答案又要乘上m^2
把E(X^2)的表达式写出来;
会发现就是在维护
$m*(s1^2+s2^2+...+sm^2)$最小
具体的
设dp[i][j]表示前i天分配了前j段路的$m*(s1^2+s2^2+..)$的最小值
dis[i]为距离的前缀和
$dp[i][j] = min(dp[i-1][x]+m*{(dis[j]-dis[x])}^2)$
复杂度是$O(N^3)$的。
然后考虑x
【错的次数】
在这里输入错的次数
【反思】
在这里输入反思
【代码】
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 3e3;
int n,m,d[N+10];
ll dp[N+10][N+10];
int dl[N+10],h,t;
ll sqr(ll x)
{
return x*x;
}
double ju(int i,int x,int y)
{
double fenzi = dp[i-1][y]+m*sqr(d[y]) - (dp[i-1][x] + m*sqr(d[x]));
double fenmu = 2*m*(d[y]-d[x]);
return fenzi/fenmu;
}
int main()
{
//freopen("F:\\rush.txt","r",stdin);
scanf("%d%d",&n,&m);
for (int i = 1;i <= n;i++)
{
scanf("%d",&d[i]);
d[i]+=d[i-1];
}
for (int i = 0;i <= N;i++)
for (int j = 0;j <= N;j++)
dp[i][j] = 1e17;
dp[0][0] = 0;
for (int i = 1;i <= m;i++)
{
h = 1,t = 1;
for (int j = 1;j <= n;j++)
{
while (h < t && ju(i,dl[h],dl[h+1]) < d[j]) h++;
dp[i][j] = min(dp[i][j],dp[i-1][dl[h]]+1LL*m*sqr(d[j]-d[dl[h]]));
while (h < t && ju(i,dl[t-1],dl[t]) > ju(i,dl[t],j)) t--;
t++;
dl[t] = j;
}
}
printf("%lld\n",dp[m][n]-sqr(d[n]));
return 0;
}
【BZOJ 4518】[Sdoi2016]征途的更多相关文章
- 动态规划(决策单调优化):BZOJ 4518 [Sdoi2016]征途
4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 532 Solved: 337[Submit][Status][ ...
- BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]
4518: [Sdoi2016]征途 题意:\(n\le 3000\)个数分成m组,一组的和为一个数,求最小方差\(*m^2\) DP方程随便写\(f[i][j]=min\{f[k][j-1]+(s[ ...
- BZOJ 4518 [Sdoi2016]征途(分治DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4518 [题目大意] 给出一个数列,分成m段,求方差最小,答案乘上m的平方. [题解] ...
- ●BZOJ 4518 [Sdoi2016]征途
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4518 题解: 斜率优化DP 首先看看最后答案的形式: 设a[i]为第i天走的距离,那么 $A ...
- bzoj 4518: [Sdoi2016]征途
Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜 ...
- bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)
题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...
- 4518: [Sdoi2016]征途
Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜 ...
- BZOJ.4072.[SDOI2016]征途(DP 斜率优化)
题目链接 题目要求使得下面这个式子最小(\(\mu=\frac{\sum_{i=1}^ma_i}{m}\)是平均数,\(a_i\)为第\(i\)段的和): \[\frac{\sum_{i-1}^m(\ ...
- bzoj4518[Sdoi2016]征途 斜率优化dp
4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1657 Solved: 915[Submit][Status] ...
- BZOJ_4518_[Sdoi2016]征途_斜率优化
BZOJ_4518_[Sdoi2016]征途_斜率优化 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到 ...
随机推荐
- SpringMVC-@RequestMapping的参数和用法
RequestMapping里面的注解包含的参数如图: RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. ...
- spark ml阅读笔记
参考文档:http://www.cnblogs.com/huliangwen/p/7491797.html
- 「HAOI2016」字符合并
「HAOI2016」字符合并 题意: 有一个长度为\(n\)的\(01\)串,你可以每次将相邻的\(k\)个字符合并,得到一个新的字符并获得一定分数.得到的新字符和分数由这\(k\)个字符确定.你 ...
- 多行文本溢出显示...的方法(-webkit-line-clamp)
限制在一个块元素显示的文本的行数. -webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中. 为了实现该 ...
- diff---比较文件不同
diff命令在最简单的情况下,比较给定的两个文件的不同.如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入.diff命令是以逐行的方式,比较文本文件的异同处.如果该命令指定进行目录的比较,则 ...
- 雷观(二十三)-IT互联网技术,不拼创新拼努力,特别低公平
上次发表"雷观(二十二)"是在2015年3月7日,一转眼,就快到了11月. 前段时间,终于狠下心来,写了本篇,第二十三啦. 小雷同志,要加油了~ 早日达到百篇雷观的里程碑~ ...
- Myeclipse学习总结(2)——MyEclipse快捷键大全
1.ctrl+shift+R 打开资源 此组快捷键可以打开工程中任意一个文件,而本人只需按文件名或者mask名的字母顺序输入就会出现对应的文件或者在内容中某个关键字再按快捷键也可以的,例如:Custo ...
- Android之——短信的备份与还原
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47091281 眼下,Android手机中的一些软件能够实现手机短信的备份与还原操作 ...
- 用 cctld工具创建带有国家代码的IP地址表
用 cctld工具创建带有国家代码的IP地址表 cctld tools is creating IP addresses table with Country Code 项目地址 https://gi ...
- C++编码优化之减少冗余拷贝或赋值
临时变量 目前遇到的一些产生临时变量的情况:函数实参.函数返回值.隐式类型转换.多余的拷贝 1. 函数实参 这点应该比较容易理解,函数参数,如果是实参传递的话,函数体里的修改并不会影响调用时传入的参数 ...