BZOJ_3963_[WF2011]MachineWorks_斜率优化+CDQ分治
BZOJ_3963_[WF2011]MachineWorks_斜率优化+CDQ分治
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
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
typedef double f2;
#define N 200050
#define eps 1e-6
#define mem(x) memset(x,0,sizeof(x))
ll f[N],D[N],P[N],R[N],G[N],C;
int n,Case,S[N],t[N],tmp[N];
#define Y(j) (f[j]-P[j]-D[j]*G[j]-G[j]+R[j])
#define X(j) (G[j])
#define K(i) (-D[i])
struct A {
ll d,p,r,g;
bool operator < (const A &x) const {
return d<x.d;
}
}a[N];
f2 getK(int p1,int p2) {
if(fabs(X(p2)-X(p1))<eps) return Y(p2)>Y(p1)?1e15:-1e15;
return (1.0*Y(p2)-Y(p1))/(X(p2)-X(p1));
}
void solve(int l,int r) {
if(l==r) return ;
int mid=(l+r)>>1;
solve(l,mid);
int i,j,k;
int top=0;
for(i=l;i<=mid;i++) {
if(f[t[i]]<P[t[i]]) continue;
while(top>1&&getK(S[top-1],S[top])<=getK(S[top-1],t[i])) top--;
S[++top]=t[i];
}
for(j=1,i=mid+1;i<=r;i++) {
while(j<top&&getK(S[j],S[j+1])+eps>=K(t[i])) j++;
f[t[i]]=max(f[t[i]],Y(S[j])-K(t[i])*X(S[j]));
}
solve(mid+1,r);
i=l,j=l,k=mid+1;
while(j<=mid&&k<=r) {
if(X(t[j])<X(t[k])) tmp[i++]=t[j++];
else tmp[i++]=t[k++];
}
while(j<=mid) tmp[i++]=t[j++];
while(k<=r) tmp[i++]=t[k++];
for(i=l;i<=r;i++) t[i]=tmp[i];
}
int work() {
Case++;
ll tmp;
scanf("%d%lld%lld",&n,&C,&tmp); D[n+1]=tmp+1;
if(n==0) return 0;
int i,j;
for(i=1;i<=n;i++) {
scanf("%lld%lld%lld%lld",&a[i].d,&a[i].p,&a[i].r,&a[i].g);
}
/*if(Case!=17) return 1;
printf("%d %lld %lld\n",n,C,tmp);
for(i=1;i<=n;i++) printf("%lld %lld %lld %lld\n",a[i].d,a[i].p,a[i].r,a[i].g);
return 0;*/
sort(a+1,a+n+1);
for(i=1;i<=n;i++) D[i]=a[i].d,P[i]=a[i].p,R[i]=a[i].r,G[i]=a[i].g,t[i]=i;
// for(i=1;i<=n;i++) printf("%lld\n",D[i]);
n++; f[0]=C; t[n]=n;
for(i=1;i<=n;i++) f[i]=-K(i)*X(0)+Y(0);
solve(1,n);
/*for(i=1;i<=n;i++) {
for(j=1;j<i;j++) {
if(f[j]>=P[j])
f[i]=max(f[i],-K(i)*X(j)+Y(j));
}
printf("%lld\n",f[i]);
}*/
printf("Case %d: %lld\n",Case,f[n]);
return 1;
}
int main() {
while(1) {
mem(a); mem(D); mem(P); mem(R); mem(f); mem(G); mem(t); mem(tmp); mem(S);
int tmp=work();
if(!tmp) return 0;
}
}
BZOJ_3963_[WF2011]MachineWorks_斜率优化+CDQ分治的更多相关文章
- 【BZOJ-1492】货币兑换Cash DP + 斜率优化 + CDQ分治
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 3396 Solved: 1434[Submit][Sta ...
- 洛谷.4655.[CEOI2017]Building Bridges(DP 斜率优化 CDQ分治)
LOJ 洛谷 \(f_i=s_{i-1}+h_i^2+\min\{f_j-s_j+h_j^2-2h_i2h_j\}\),显然可以斜率优化. \(f_i-s_{i-1}-h_i^2+2h_ih_j=f_ ...
- BZOJ3963 WF2011MachineWorks(动态规划+斜率优化+cdq分治)
按卖出时间排序后,设f[i]为买下第i台机器后的当前最大收益,则显然有f[i]=max{f[j]+gj*(di-dj-1)+rj-pi},且若此值<0,应设为-inf以表示无法购买第i台机器. ...
- bzoj1492/luogu4027 货币兑换 (斜率优化+cdq分治)
设f[i]是第i天能获得的最大钱数,那么 f[i]=max{在第j天用f[j]的钱买,然后在第i天卖得到的钱,f[i-1]} 然后解一解方程什么的,设$x[j]=\frac{F[j]}{A[j]*Ra ...
- [Noi2014]购票 BZOJ3672 点分治+斜率优化+CDQ分治
Description 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会.全国的城市构成了一棵以SZ市为根的有根树,每个城市与它的 ...
- [BZOJ1492][NOI2007]货币兑换Cash(斜率优化+CDQ分治)
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 5838 Solved: 2345[Submit][Sta ...
- 【BZOJ2726】[SDOI2012]任务安排 斜率优化+cdq分治
[BZOJ2726][SDOI2012]任务安排 Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若 ...
- 【BZOJ1492】[NOI2007]货币兑换Cash 斜率优化+cdq分治
[BZOJ10492][NOI2007]货币兑换Cash Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下简称B券).每 ...
- BZOJ2726 [SDOI2012]任务安排 【斜率优化 + cdq分治】
题目 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i ...
随机推荐
- Java 新手的通病
一:对算法和数据结构不熟悉 为什么我先拿“数据结构和算法”说事捏?这玩意是写程序最最基本的东东.不管你使用 Java 还是其它的什么语言,都离不开它.而且这玩意是跨语言的,学好之后不管在哪门语言中都能 ...
- Win10 - 默认图片查看器恢复
1. 新建一个文本文件“1.txt” 2. 在“1.txt”中添加如下代码,并保存: Windows Registry Editor Version 5.00 ; Change Extension's ...
- CNN网络--AlexNet
ImageNet Classification with Deep Convolutional Neural Networks 从AlexNet剖析-卷积网络CNN的一般结构 AlexNet是Hint ...
- DeepFM
DeepFM integrates the architectures of FM and deep neural networks (DNN). It models low-order featur ...
- BUPT复试专题—矩阵幂(2012)
https://www.nowcoder.com/practice/31e539ab08f949a8bece2a7503e9319a?tpId=67&tqId=29638&rp=0&a ...
- [Cypress] install, configure, and script Cypress for JavaScript web applications -- part2
Use Cypress to test user registration Let’s write a test to fill out our registration form. Because ...
- CSS3绘制灰太狼动画,绝对精彩
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- UP board 漫谈——从Atom到UP Board
前言 原创文章,转载引用务必注明链接.如有疏漏,欢迎指正. 图文部分引用自CNXSoft 每块开发板都有其设计理念,也是其特色所在.有做工优良.接口丰富的多媒体全能开发板Lemaker Guita ...
- 开源项目:单行日历(CalendarView)
http://www.cnblogs.com/warnier-zhang/p/4750525.html CalendarView.zip
- unity视频播放,
PC端视频播放: Unity中实现PC端播放视频,非常easy用到MovieTexture属于贴图Texture的子类. 在播放视频之前.我们得记得下载quicktime插件,仅仅有导入了quickt ...