【GDOI2014模拟】服务器
来源:互联网 发布:电脑mac地址怎么看 编辑:程序博客网 时间:2024/06/05 04:25
前言
直到比赛最后几分钟,才发现60%数据居然是一个水dp,结果没打完。
题目
我们需要将一个文件复制到n个服务器上,这些服务器的编号为S1, S2, …, Sn。
首先,我们可以选择一些服务器,直接把文件复制到它们中;将文件复制到服务器Si上,需要花费ci > 0的置放费用。对于没有直接被复制文件的服务器Si来说,它依次向后检查Si+1, Si+2, …直到找到一台服务器Sj:Sj中的文件是通过直接复制得到的,于是Si从Sj处间接复制得到该文件,这种复制方式的读取费用是j – i(注意j>i)。另外,Sn中的文件必须是通过直接复制得到的,因为它不可能间接的通过别的服务器进行复制。我们设计一种复制方案,即对每一台服务器确定它是通过直接还是间接的方式进行复制(Sn只能通过直接方式),最终使每一台服务器都得到文件,且总花费最小。
分析
60%的数据
水dp,设
显然,转移为
100%的数据
现在就要想办法给dp加斜率优化了。
有两个位置
那么
移项得
接着就可以打斜率优化dp了。
#include <cmath>#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <queue>const long long maxlongint=214748364700;using namespace std;long long f[200000],n,m,c[200000],d[200000];long long sum(long x,long y){ return y*(y-x)-(y-x)*(x+y-1)/2;}double slope(long long x,long long y){ return (f[x]-f[y]+(x*x-y*y+y-x)/2)*1.0/(x-y);}int main(){ scanf("%lld",&n); for(long long i=1;i<=n;i++) { scanf("%lld",&c[i]); } f[n]=c[n]; long long l,r; d[l=r=1]=n; for(long long i=n-1;i>=1;i--) { while(l<r && slope(d[l],d[l+1])>=i) l++; f[i]=c[i]+f[d[l]]+sum(i+1,d[l]); while(l<r && slope(d[r-1],d[r])<slope(d[r],i)) r--; d[++r]=i; } long long ans=maxlongint; for(long long i=1;i<=n;i++) ans=min(ans,f[i]+sum(1,i)); printf("%lld",ans);}
2 0
- 【GDOI2014模拟】服务器
- 【GDOI2014模拟】服务器
- 3432. 【GDOI2014模拟】服务器
- JZOJ 3432. 【GDOI2014模拟】服务器
- 【GDOI2014模拟】服务器 题解+代码
- jzoj. 3432. 【GDOI2014模拟】服务器
- JZOJ.3432【GDOI2014模拟】服务器 解题报告
- 【GDOI2014模拟】服务器 (斜率单调队列优化Dp)
- [JZOJ3431]【GDOI2014模拟】网格
- [bzoj3754][GDOI2014模拟]Tree
- 【GDOI2014模拟】网格
- 【GDOI2014模拟】网格
- 【GDOI2014模拟】网格
- 【GDOI2014模拟】Tree
- 【GDOI2014模拟】Tree
- 【GDOI2014模拟】网格
- 【GDOI2014模拟】旅行(水法)
- 【GDOI2014模拟】Pty爬山
- linux中常用文件操作调用系统
- 交换机、路由器、网关的概念,并知道各自的用途
- 字典树+数组的前后部分数异或的最大值
- Runge-kutta法原理图示
- 扒一扒那些奇葩的甲方吧
- 【GDOI2014模拟】服务器
- [Android]TextView设置超链接
- 使用PHP实现验证码
- [Android] 获取网络图片并显示
- 建立面向对象模型
- LightOJ 1201 A Perfect Murder 最大独立集
- 调整数组顺序使奇数位于偶数前面
- C++逗号运算符的作用
- Spring学习(二十三)Spring表达式语言介绍