hdu 3842 Machine Works(cdq分治维护凸壳)
详细题解: HDU 3842 Machine Works cdq分治 斜率优化
细节比较多,好好体会一下。
在维护斜率的时候要考虑x1与x2是否相等,这里要处理一下。
#include<bits/stdc++.h>
#define F(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long ll;
typedef pair<int,ll>P; const int N=1e5+;
int n,c,d,cas;
ll dp[N];
struct node{
int D,P,R,G;
bool operator < (const node &b)const{return D<b.D;}
}a[N];
P A[N],Q[N]; ll h(int j){return dp[j]-a[j].P-(ll)(a[j].D+)*a[j].G+a[j].R;}
inline void up(ll &a,ll b){if(a<b)a=b;} int check(P a,P b,P c)
{
ll y1=b.second-a.second,y2=c.second-b.second;
ll x1=b.first-a.first,x2=c.first-b.first;
return (double)x1*y2>=(double)x2*y1;
} void cdq(int l=,int r=n)
{
if(l==r)return;
int mid=l+r>>;
cdq(l,mid);
int head=,tail=,ed=;
F(i,l,mid)if(dp[i]>=a[i].P)A[++ed]=P(a[i].G,h(i));
sort(A+,A++ed);
F(i,,ed)
{
while(head<tail&&check(Q[tail-],Q[tail],A[i]))tail--;
Q[++tail]=A[i];
}
F(i,mid+,r)
{
while(head<tail&&Q[head+].second-Q[head].second>=-(ll)a[i].D*(Q[head+].first-Q[head].first))head++;
up(dp[i],(ll)Q[head].first*a[i].D+Q[head].second);
} cdq(mid+,r);
} int main()
{
while(scanf("%d%d%d",&n,&c,&d),n+c+d)
{
F(i,,n)scanf("%d%d%d%d",&a[i].D,&a[i].P,&a[i].R,&a[i].G);
sort(a+,a++n);
a[++n].D=d+,a[n].G=a[n].P=a[n].R=;
F(i,,n)dp[i]=c;
cdq();
printf("Case %d: %lld\n",++cas,dp[n]);
}
return ;
}
hdu 3842 Machine Works(cdq分治维护凸壳)的更多相关文章
- Codeforces Gym 101175F - Machine Works(CDQ 分治维护斜率优化)
题面传送门 首先很明显我们会按照 \(d_i\) 的顺序从小到大买这些机器,故不管三七二十一先将所有机器按 \(d_i\) 从小到大排序. 考虑 \(dp\),\(dp_i\) 表示在时刻 \(d_i ...
- HDU 5730 Shell Necklace cdq分治+FFT
题意:一段长为 i 的项链有 a[i] 种装饰方式,问长度为n的相连共有多少种装饰方式 分析:采用dp做法,dp[i]=∑dp[j]*a[i-j]+a[i],(1<=j<=i-1) 然后对 ...
- HDU 6183 Color it cdq分治 + 线段树 + 状态压缩
Color it Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Pro ...
- LOJ 2353 & 洛谷 P4027 [NOI2007]货币兑换(CDQ 分治维护斜率优化)
题目传送门 纪念一下第一道(?)自己 yy 出来的 NOI 题. 考虑 dp,\(dp[i]\) 表示到第 \(i\) 天最多有多少钱. 那么有 \(dp[i]=\max\{\max\limits_{ ...
- [CF1137E]Train Car Selection[维护凸壳]
题意 题目链接 分析 首先,如果加到了车头所有之前的车厢都不可能成为答案. 如果加到了车尾,容易发现对于 \(x_2<x_3\) 而言在某个时刻会出现 2 又比 3 优的情况. 具体来讲,如果存 ...
- XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Khamovniki Problem J Stairways解题报告(分块+维护凸壳)
首先ORZ一发Claris聚聚的题解:http://www.cnblogs.com/clrs97/p/8689215.html,不然我可能没机会补过这道神题了. 这里写一个更详细的题解吧(我还是太菜了 ...
- bzoj2402 陶陶的难题II 分数规划+树剖+线段树维护凸壳+二分
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2402 题解 看上去很像分数规划的模型.于是就二分吧.令 \[ \begin{align*}\f ...
- ZOJ 3937 More Health Points (2016 浙江省赛 B题,可持久维护凸壳)
题目链接 2016 ZJCPC Problem B 题意 CF 660F的树上版本. 其他做的方法都差不多,关键是把凸壳放到树上. 每次确定扔掉几个元素的时候直接$O(1)$修改(先不清楚这个位置 ...
- HDU 3824/ BZOJ 3963 [WF2011]MachineWorks (斜率优化DP+CDQ分治维护凸包)
题面 BZOJ传送门(中文题面但是权限题) HDU传送门(英文题面) 分析 定义f[i]f[i]f[i]表示在iii时间(离散化之后)卖出手上的机器的最大收益.转移方程式比较好写f[i]=max{f[ ...
随机推荐
- dpkg: error processing mysql-server (--configure): dependency problems - leaving unconfigured
dpkg: error processing mysql-server (--configure): dependency problems - leaving unconfigured start: ...
- js 设为首页、加入收藏
// 加入收藏 <a onclick="AddFavorite(window.location,document.title)">加入收藏</a>func ...
- Javascript多线程引擎(六)
Javascript多线程引擎(六) 经过三个月的时间, Javascript 引擎已经完成beta版本(还不支持多线程特性, 预计下个星期就可以支持了, 现阶段还在进行测试基本JS单元功能), 并且 ...
- 推荐几个JSON工具
JSON查看 http://jsonviewer.codeplex.com/ JSON转类(非常好使) http://jsonclassgenerator.codeplex.com https://g ...
- C#的Task和Java的Future
C#的Task和Java的Future 自从项目中语言换成Java后就很久没有看C#了,但说实话我是身在曹营心在汉啊.早就知道.NET4.5新增了async和await但一直没有用过,今天看到这篇文章 ...
- Java泛型学习笔记--Java泛型和C#泛型比较学习(一)
总结Java的泛型前,先简单的介绍下C#的泛型,通过对比,比较学习Java泛型的目的和设计意图.C#泛型是C#语言2.0和通用语言运行时(CLR)同时支持的一个特性(这一点是导致C#泛型和Java泛型 ...
- 【ios开发】Block编程
1 什么是block iOS SDK 4.0开始,Apple引入了block这一特性.字面上说,block就是一个代码块,但是它的神奇之处在于在内联(inline)执行的时候(这和C++很像)还可以传 ...
- 运用Unity结合PolicyInjection实现拦截器
运用Unity结合PolicyInjection实现拦截器[结合操作日志实例] 上一篇文章我们通过Unity自身Unity.InterceptionExtension.IInterceptionBeh ...
- MongoDB学习(翻译2)
C#驱动之LINQ教程 介绍 本教程涵盖了1.8发布版本对linq查询的支持. 开始本教程之前,你应该至少阅读下C#驱动教程关于C#驱动的介绍 快速开始 首先,添加下面命名空间到您的程序中: usin ...
- 使用entity framework开发oracle
A.vs2010 SP1 B.ODAC(http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html) ...