bzoj3963[WF2011]MachineWorks cdq分治+斜率优化dp
3963: [WF2011]MachineWorks
Time Limit: 30 Sec Memory Limit: 256 MB
Submit: 270 Solved: 80
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
6 12 1 3
1 9 1 2
3 2 1 2
8 20 5 4
4 11 7 4
2 10 9 1
0 0 0
Sample Output
转移并不满足单调啊,所以需要用cdq分治来维护单调的转移
也可以写splay
这篇博客写得不错http://www.cnblogs.com/zj75211/p/8148800.html
#include<bits/stdc++.h>
#define N 100050
#define ll long long
#define inf 2147483647
using namespace std;
int n,m,D,s[N];ll f[N];
struct date{int d,p,r,g,id;}q[N],a[N];
//struct point{int x;ll y;}p[N],b[N];
bool cmp1(date a,date b){return a.d<b.d;}
ll X(int i){
return q[i].r+f[q[i].id]-q[i].p-(ll)q[i].g*(q[i].d+);
}
int Y(int i){
return q[i].g;
} double G(int i,int j){
// if(Y(i)==Y(j))return (double)(X(i)>X(j)?inf:-inf);
return (double)(X(i)-X(j))/(double)(Y(i)-Y(j));
}
void solve(int l,int r){
if(l>r)return;
if(l==r){
f[l]=max(f[l],f[l-]);
return;
}
int mid=(l+r)>>;
int p1=l,p2=mid+;
//for(int i=l;i<=r;i++)q[i]=a[i];
solve(l,mid);int tp=,h=;
for(int i=l;i<=mid;i++){
if(q[i].p>f[q[i].id])continue;
if(Y(i)==Y(s[tp])&&tp){
if(X(i)>X(s[tp]))tp--;
else continue;
}
while(tp>&&G(s[tp],s[tp-])<=G(i,s[tp]))tp--;
s[++tp]=i;
}
for(int i=mid+;i<=r;i++){
while(h<tp&&G(s[h],s[h+])>=-q[i].d)h++;
f[i]=max(f[i],f[i-]);
if(h<=tp)f[i]=max(f[i],f[q[s[h]].id]-q[s[h]].p+q[s[h]].r+(ll)q[s[h]].g*(q[i].d-q[s[h]].d-));
}
solve(mid+,r);
p1=l;p2=mid+;
for(int i=l;i<=r;i++){
if(p1<=mid&&q[p1].g<=q[p2].g)a[i]=q[p1++];
else if(p2<=r)a[i]=q[p2++];
else a[i]=q[p1++];
}
for(int i=l;i<=r;i++)q[i]=a[i];
}
int main(){
int cas=;
while(scanf("%d%d%d",&n,&m,&D)!=EOF){
cas++;
if(!n&&!m&&!D)break;
memset(f,-,sizeof(f));
f[]=f[]=m;int d,p,r,g;
for(int i=;i<=n;i++)
scanf("%d%d%d%d",&d,&p,&r,&g),
q[i]=(date){d,p,r,g,i};
q[++n]=(date){D+,,,,n};
sort(q+,q++n,cmp1);
for(int i=;i<=n;i++)q[i].id=i;
solve(,n);
printf("Case %d: %lld\n",cas,f[n]);
}
return ;
}
bzoj3963[WF2011]MachineWorks cdq分治+斜率优化dp的更多相关文章
- BZOJ 3963 HDU3842 [WF2011]MachineWorks cdq分治 斜率优化 dp
http://acm.hdu.edu.cn/showproblem.php?pid=3842 写的check函数里写的<但是应该是<=,调了一下午,我是个zz. 就是普通的斜率优化因为有两 ...
- BZOJ 3963: [WF2011]MachineWorks [CDQ分治 斜率优化DP]
传送门 当然了WF的题uva hdu上也有 你的公司获得了一个厂房N天的使用权和一笔启动资金,你打算在这N天里租借机器进行生产来获得收益.可以租借的机器有M台.每台机器有四个参数D,P,R,G.你可以 ...
- 【BZOJ3963】[WF2011]MachineWorks cdq分治+斜率优化
[BZOJ3963][WF2011]MachineWorks Description 你是任意性复杂机器公司(Arbitrarily Complex Machines, ACM)的经理,公司使用更加先 ...
- 【uoj#244】[UER #7]短路 CDQ分治+斜率优化dp
题目描述 给出 $(2n+1)\times (2n+1)$ 个点,点 $(i,j)$ 的权值为 $a[max(|i-n-1|,|j-n-1|)]$ ,找一条从 $(1,1)$ 走到 $(2n+1,2n ...
- BZOJ1492:[NOI2007]货币兑换 (CDQ分治+斜率优化DP | splay动态维护凸包)
BZOJ1492:[NOI2007]货币兑换 题目传送门 [问题描述] 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和B纪念券(以下简称B券).每个持有金券的 ...
- BZOJ 1492: [NOI2007]货币兑换Cash [CDQ分治 斜率优化DP]
传送门 题意:不想写... 扔链接就跑 好吧我回来了 首先发现每次兑换一定是全部兑换,因为你兑换说明有利可图,是为了后面的某一天两种卷的汇率差别明显而兑换 那么一定拿全利啊,一定比多天的组合好 $f[ ...
- bzoj3672/luogu2305 购票 (运用点分治思想的树上cdq分治+斜率优化dp)
我们都做过一道题(?)货币兑换,是用cdq分治来解决不单调的斜率优化 现在它放到了树上.. 总之先写下来dp方程,$f[i]=min\{f[j]+(dis[i]-dis[j])*p[i]+q[i]\} ...
- bzoj1492[NOI2007]货币兑换Cash cdq分治+斜率优化dp
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 5541 Solved: 2228[Submit][Sta ...
- [BZOJ1492] [NOI2007] 货币兑换Cash(cdq分治+斜率优化)
[BZOJ1492] [NOI2007] 货币兑换Cash(cdq分治+斜率优化) 题面 分析 dp方程推导 显然,必然存在一种最优的买卖方案满足:每次买进操作使用完所有的人民币:每次卖出操作卖出所有 ...
随机推荐
- 22.C++- 继承与组合,protected访问级别
在C++里,通过继承和组合实现了代码复用,使得开发效率提高,并且能够通过代码看到事物的关系 组合比继承简单,所以在写代码时先考虑能否组合,再来考虑继承. 组合的特点 将其它类的对象作为当前类的成员使用 ...
- OpenGL中怎么把世界坐标系变成屏幕坐标系
对这个3D坐标手动进行OpenGL的四个变换,得到的结果就是屏幕上的像素坐标.前三个变换(Model, View, Projection)都是4x4矩阵,操作对象是四维向量,所以需要把(100, 10 ...
- 数据结构与算法 —— 链表linked list(01)
链表(维基百科) 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必须按顺序存储, ...
- zf框架的思想及学习总结
在Php的配置文件中可以设置日志文件 dos命令进入文件夹,然后利用命令:>zf.bat create project d:/hspzf这样就可以在d盘进行创建项目文件了:然后需要把框架的Zen ...
- js数组string对象api常用方法
charAt() 方法可返回指定位置的字符. stringObject.charAt(index) indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. stringObject ...
- ajax的原理解析
一.关于同步与异步的分析: 异步传输是面向字符的传输,它的单位是字符:而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的.而ajax就是采用的异步请求方式的. ...
- Lock(三)查看是谁把表给锁了
查看是谁把表给锁了 select se1.inst_id as 被阻塞的会话节点, se2.inst_id as 罪魁祸首节点, se1.sid as 被阻塞的会话ID, ob.object_name ...
- SQL Server 实现类似C#中 PadLeft功能
USE [Test] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --@column 表示字段或者常量,@paddingChar 表示 补位 ...
- Jenkins+maven+git配置
1) 安装maven 如下图我已装好maven(这是我很早以前装的,安装教程大家可以百度一下,很容易安装的) 2) 安装git客户端 如下图所示,我也安装好了git客户 ...
- Java:日期类Date与Calendar
Timestamp类型与日期类型之间的转化? Timestamp timestamp = Timestamp.valueOf("2017-03-17 07:00:00"); Dat ...