【JZOJ 3432】服务器 斜率优化DP常见问题&详细解答
来源:互联网 发布:淘宝为啥不卖斐讯 编辑:程序博客网 时间:2024/06/05 02:14
Description
我们需要将一个文件复制到n个服务器上,这些服务器的编号为S1, S2, …, Sn。
首先,我们可以选择一些服务器,直接把文件复制到它们中;将文件复制到服务器Si上,需要花费ci > 0的置放费用。对于没有直接被复制文件的服务器Si来说,它依次向后检查Si+1, Si+2, …直到找到一台服务器Sj:Sj中的文件是通过直接复制得到的,于是Si从Sj处间接复制得到该文件,这种复制方式的读取费用是j – i(注意j>i)。另外,Sn中的文件必须是通过直接复制得到的,因为它不可能间接的通过别的服务器进行复制。我们设计一种复制方案,即对每一台服务器确定它是通过直接还是间接的方式进行复制(Sn只能通过直接方式),最终使每一台服务器都得到文件,且总花费最小。
100%的数据中,1 <= n <= 1 000 000,1 <= ci <= 1 000 000 000
Analysis
比赛时我打的二维dp,可是许多人都是一维的,而且只有打一维的才可能想到正解——斜率优化。
一年没打斜率优化了,都快忘掉了QAQ,赶紧恶补了一下。
好吧,一维的dp式子是
这样做是
对于当前的
移项,整理得
设
所以我们维护一个单调递减的队列,里面大概长成这个样子
队头即
然后我们
而做完当前的
若有
采用反证法,假设
综合上面两个不等式,得
惊奇地发现不等式出现了矛盾!
得证!
所以要把
但是,naive的我曾经有过这样一个疑问,为什么不能直接用
因为当前
好吧,斜率优化dp为什么起这个名呢?因为
这个图够直观吧。
Code
#include<cstdio>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;typedef long long ll;const int N=1000010;int n;ll f[N],q[N],a[N];double G(ll j,ll k){ return (f[j]-f[k]+(j*j-k*k-j+k)/2.0)*1.0/(j-k);}int main(){ scanf("%d",&n); fo(i,1,n) scanf("%lld",&a[i]); f[n]=a[n]; int l=1,r=1; q[1]=n; fd(i,n-1,0) { while(l<r && i<G(q[l],q[l+1])) l++; f[i]=f[q[l]]+a[i]+(q[l]-i)*(q[l]-i-1)/2; while(l<r && G(q[r-1],q[r])<G(i,q[r])) r--; q[++r]=i; } printf("%lld",f[0]);}
0 0
- 【JZOJ 3432】服务器 斜率优化DP常见问题&详细解答
- 【JZOJ 3432】【OnlineJudge 1061】小M的服务器(含斜率优化解释)
- dp斜率优化 Hdu 3507(Print Article)详细题解
- DP(斜率优化)
- 【斜率优化DP】Batch_Scheduling
- dp优化--斜率
- 斜率优化DP
- 斜率优化DP
- hdu3507斜率优化dp
- DP斜率优化总结
- hdu3480 斜率优化dp
- hdu3507 斜率优化dp
- 斜率优化DP
- 斜率优化DP 【pascal】
- 斜率优化DP
- dp 斜率优化
- 斜率优化 DP
- HDU_3669 斜率优化DP
- 测试者之间的闲聊
- Java解析网络数据流的三种特殊方法
- c++实践参考:储存班长信息的学生类
- 【Leetcode】Design Twitter
- 论VR与生活的联系
- 【JZOJ 3432】服务器 斜率优化DP常见问题&详细解答
- redis内存数据库
- 【折腾日记GEN8_0】预算及汇总
- JavaScript 通过plus读取android手机短信内容
- 用bat批处理不自动关闭cmd窗口
- Pycharm注册方式
- 分布式系统中的定时任务全解(一)
- 第十、十一周项目3—警察与厨师
- post插件