【BZOJ1492】【NOI2007】货币兑换
我果然不会斜率优化
原题:
.png)
.png)
f[i]这么鬼畜的意义我是想不到啊QAQ
恩这道题从一开始就鬼畜了起来
根据得出的基础dp可以写出n^2的程序,显然优化对吧,斜率优化(为啥要斜率优化?我不懂啊QAQ
然后令j比k优,就酱
令g[i]=f[i]/rate[i],酱
然后就斜率优化了,但是维护凸包似乎很麻烦(我不会QAQ),splay不好写,我们cdq分治
具体咋整,看代码意会吧我讲不清楚QAQ
方便以后常看所以代码加了注释QAQ
代码:(抄黄学长的QAQ
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const double inf=1e20;
const double eps=2e-;
struct nds{double x,y,a,b,k,rt; int w,id;}a[],tmp[];
int n;
double f[];
int stck[],tp=;
double gtk(int x,int y){
if(!y) return -inf;
if(fabs(a[x].x-a[y].x)<eps) return inf;
return (a[y].y-a[x].y)/(a[y].x-a[x].x);
}
void cdq(int l,int r){
if(l==r){
f[l]=max(f[l],f[l-]);
a[l].y=f[l]/(a[l].a*a[l].rt+a[l].b);//y是a券的个数
a[l].x=a[l].rt*a[l].y;//x是b券
return ;
}
int md=(l+r)>>; int t1=l,t2=md+;
for(int i=l;i<=r;++i) tmp[(a[i].id<=md?t1:t2)++]=a[i];
for(int i=l;i<=r;++i) a[i]=tmp[i];//先按照原来id左右划分
cdq(l,md);//中序cdq
tp=;
for(int i=l;i<=md;++i){
while(tp> && gtk(stck[tp-],stck[tp])<gtk(stck[tp-],i)+eps) --tp; stck[++tp]=i;
}//搞左边的凸包
stck[++tp]=;
for(int i=md+,j=;i<=r;++i){
while(j<tp && gtk(stck[j],stck[j+])+eps>a[i].k) ++j;
f[a[i].id]=max(f[a[i].id],a[stck[j]].x*a[i].a+a[stck[j]].y*a[i].b);
}//更新答案
cdq(md+,r);
t1=l,t2=md+;
for(int i=l;i<=r;++i){
if(t1>md) tmp[i]=a[t2++];
else if(t2>r) tmp[i]=a[t1++];
else tmp[i]=a[(a[t1].x<a[t2].x||(fabs(a[t1].x-a[t2].x)<eps&&a[t1].y<a[t2].y)?t1:t2)++];
}//按x第一y第二优先级排序,方便上一层搞凸包a
for(int i=l;i<=r;++i) a[i]=tmp[i];
}
bool cmp(nds a,nds b){ return a.k>b.k;}
int main(){freopen("ddd.in","r",stdin);
scanf("%d%lf",&n,&f[]);
for(int i=;i<=n;++i){
scanf("%lf%lf%lf",&a[i].a,&a[i].b,&a[i].rt);
a[i].k=-a[i].a/a[i].b,a[i].id=i;
}
sort(a+,a+n+,cmp);//没想明白对k排序的意义QAQ
cdq(,n);
printf("%.3lf\n",f[n]);
return ;
}
【BZOJ1492】【NOI2007】货币兑换的更多相关文章
- [BZOJ1492] [NOI2007] 货币兑换Cash(cdq分治+斜率优化)
[BZOJ1492] [NOI2007] 货币兑换Cash(cdq分治+斜率优化) 题面 分析 dp方程推导 显然,必然存在一种最优的买卖方案满足:每次买进操作使用完所有的人民币:每次卖出操作卖出所有 ...
- [BZOJ1492][NOI2007]货币兑换Cash(斜率优化+CDQ分治)
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 5838 Solved: 2345[Submit][Sta ...
- bzoj1492[NOI2007]货币兑换Cash cdq分治+斜率优化dp
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 5541 Solved: 2228[Submit][Sta ...
- bzoj千题计划237:bzoj1492: [NOI2007]货币兑换Cash
http://www.lydsy.com/JudgeOnline/problem.php?id=1492 dp[i] 表示 第i天卖完的最大收益 朴素的dp: 枚举从哪一天买来的在第i天卖掉,或者是不 ...
- BZOJ1492: [NOI2007]货币兑换Cash 【dp + CDQ分治】
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MB Submit: 5391 Solved: 2181 [Submit][S ...
- [BZOJ1492] [NOI2007]货币兑换Cash 斜率优化+cdq/平衡树维护凸包
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 5907 Solved: 2377[Submit][Sta ...
- BZOJ1492: [NOI2007]货币兑换Cash
设$x_j$,$y_j$为第$j$天能买的A,B券数量,$f_i$为第$i$天的最大收益.$f_i=\max_{1\le j<i}a_ix_j+b_iy_j$,最大化$f_i$即找一个点$(x_ ...
- BZOJ1492 [NOI2007]货币兑换
Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个 ...
- Bzoj1492: [NOI2007]货币兑换Cash(不单调的斜率优化)
题面 传送门 Sol 题目都说了 必然存在一种最优的买卖方案满足: 每次买进操作使用完所有的人民币: 每次卖出操作卖出所有的金券. 设\(f[i]\)表示第\(i\)天可以有的最大钱数 枚举\(j&l ...
- bzoj1492 [NOI2007]货币兑换Cash【cdq分治】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1492 推荐博客:http://www.cnblogs.com/zig-zag/archive ...
随机推荐
- .NET接入UnionPay银联支付(一)手机wap支付
最近呢,比较忙,公司在接入银联全渠道支付,博主接手的wap支付,发表一下博主在接入的时候遇到的坑和注意事项,方便大家学习接入,爬坑的路上更顺利一点~ 开发步骤 1. 以表单的方式组装要发送给银联全渠道 ...
- python介绍与入门
一.python 的介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为 ...
- 图解中序遍历线索化二叉树,中序线索二叉树遍历,C\C++描述
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- Instruments leak黑魔法定位内存泄漏
leak是一款很赞的内存检查的工具,但在使用的过程中有点繁琐,至少有些底层的泄漏笔者还是不知道如何下手 下面介绍一下简单leak的使用: 首先你要确认你的target不会被拒绝,确保profile是d ...
- loadrunner http协议性能测试脚本编写
性能测试其实测的就是接口的性能,不管是用工具录制还是自己写,都是围绕接口的,录制也是把接口录制下来而已,但是录制下来的脚本比较乱,会把很多相关的请求都录下来. 在这里我们手动写HTTP协议的get.p ...
- spring boot 集成 quartz 定时任务
spring boot: @EnableScheduling开启计划任务支持,@Scheduled计划任务声明 1.pom.xml 引入依赖 <dependency> <groupI ...
- EEPROM读写学习笔记与I2C总线(转)
reference:https://www.cnblogs.com/uiojhi/p/7565232.html 无论任何电子产品都会涉及到数据的产生与数据的保存,这个数据可能并不是用来长久保存,只是在 ...
- Docker(3):Dockerfile介绍及简单示例
Dockerfile 概念 Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像.它们简化了从头到尾的流程并极大的简化了部署工作.Dockerfile从FR ...
- netty pipeline.addLast
pipeline有一个主要的实现类 DefaultChannelPipeline ,addLast顾名思义,就是在处理器链的最后添加一个channelHandler. 代码如下:@Override ...
- 九、编写led驱动
led.c #include <linux/init.h> #include <linux/module.h> #include <linux/cdev.h> #i ...