【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 ...
随机推荐
- PC/FORTH 编辑程序
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- ubuntu查看占用某端口的程序
查看端口使用情况,使用netstat命令. 查看已经连接的服务端口(ESTABLISHED netstat -a 查看所有的服务端口(LISTEN,ESTABLISHED) netstat -ap 查 ...
- tf.trainable_variables() and tf.all_variables()
tf.trainable_variables() 返回的是 所有需要训练的变量列表 tf.all_variables() 返回的是 所有变量的列表 v = tf.Variable(0, name=' ...
- hdu3001(状压dp,三进制)
Travelling Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- YLZ开发外网前端
YLZ外网前端使用的是boottstrap和layer和validform等插件 表格是用boottstrap的tablle加上框架人员开发的ajaxpageresponse进行协调开发 弹窗使用的l ...
- Spring学习三
Spring注解来注入bean 在classpath中扫描组件 组件扫描,即componetscanning 利用注解来扫描的组件有 @Component :基本注解,表示一个受Spring管理的 ...
- L290 英语中级班-3月上
1元音饱满度 a [ei] name gamee [i:] he she mei [ai] fine likeo [ou] go homeu [ u:] use blue 2口音适应 刚开始说时,慢点 ...
- L249 语法
Even when homeless individuals manage to find a shelter that will give them three meals a day and a ...
- Beta阶段冲刺---Day5
一.Daily Scrum Meeting照片 二.今天冲刺情况反馈 昨天已完成的工作: (1)闯关模式界面设计: (2)主界面做了相应修改: (3)RankActivity修改. (4)RANKli ...
- python 读写、创建 文件的方法(必看)
python 读写.创建 文件的方法(必看) 更新时间:2016年09月12日 10:26:41 投稿:jingxian 我要评论下面小编就为大家带来一篇python 读写.创建 文件的方法(必看). ...