题目链接:hdu 3842 Machine Works

详细题解: 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 ;
}

最新文章

  1. composer
  2. 初探Spring Batch
  3. fulltext不支持Mysql中文全文索引
  4. Tesseract-OCR识别中文与训练字库实例
  5. QCustomplot使用分享(四) QCPAbstractItem
  6. android apk简单反编译
  7. DNS域名解析
  8. html,body最顶层元素.
  9. js 数组常用方法说明
  10. Linux学习之开机启动
  11. php.ini与php-fpm.conf配置文件的区别
  12. 201521123026 《java程序设计》 第九周学习总结
  13. 弹出层之2:JQuery.BlockUI
  14. 文本分布式表示(一):word2vec理论
  15. LSB和MSB
  16. Supervisor的作用与配置
  17. mysql修改当前用户的密码
  18. CodeForces - 589A(字符串处理)
  19. 用ngif 多次判断 Expression has changed after it was checked
  20. JavaScript -- Document-ElementsByName

热门文章

  1. Unity 3.5
  2. 自定义MVP .net框架
  3. 流媒体:V4L2视频获取
  4. Python Learing(一):Basic Grammar
  5. [转]Blocking Code Injection on iOS and OS X
  6. MongoDB学习(翻译5)
  7. MySQL TIMESTAMP(时间戳)详解
  8. JavaScript面向对象编程(二)构造函数和类
  9. WP8开发札记(一)WP8应用生命周期管理
  10. uploadify的使用