BZOJ 1492: [NOI2007]货币兑换Cash [CDQ分治 斜率优化DP]

传送门

题意:不想写...


扔链接就跑

好吧我回来了

首先发现每次兑换一定是全部兑换,因为你兑换说明有利可图,是为了后面的某一天两种卷的汇率差别明显而兑换

那么一定拿全利啊,一定比多天的组合好

$f[i]$表示第$i$天最多能得到的钱在这一天可以换成多少$A$卷

枚举使用哪一天留下的卷,按这一天的汇率换成钱来更新最大钱数

再用这个钱数更新$f[i]$

这样是$O(n^2)$的

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
typedef long long ll;
const int N=1e5+5,M=1e4+5;
const double eps=1e-9;
inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
int n,s;
double a[N],b[N],r[N];
double f[N];
void dp(){f[1]=s*r[1]/(a[1]*r[1]+b[1]);double t=s;for(int i=2;i<=n;i++){for(int j=1;j<i;j++) t=max(t,f[j]*a[i]+f[j]/r[j]*b[i]);f[i]=max(f[i],t*r[i]/(a[i]*r[i]+b[i]));}printf("%.3lf",t);
}
int main(){freopen("in","r",stdin);n=read();s=read();for(int i=1;i<=n;i++) scanf("%lf%lf%lf",&a[i],&b[i],&r[i]);dp();
}
DP-naive

然后发现这个式子可以斜率优化

假设转移$j$比$k$更优,且$f_j<f_k$

令$g_i=\frac{f_i}{r_i}$

$\frac{g_k-g_j}{f_k-f_j}\ <\ -\frac{a_i}{b_i}$

然后$f$不单调,所以用平衡树或者CDQ分治来维护

$CDQ$分治里左面按$x$排序,右面按$k$排序

 

注意:

CDQ分治中$l$和$1$一定别打错.........我$Debug$了好长时间

比较斜率的时候要$+eps$,精度太玄学了呜呜呜

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=1e5+5;
const double eps=1e-9;
inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
int n;
double d[N];
struct Day{double a,b,r,k,x,y;int id;bool operator <(const Day &r)const{return k>r.k;}
}p[N],t[N];
inline bool cmp(Day &a,Day &b){//a<breturn a.x<b.x||(abs(a.x-b.x)<eps&&a.y<b.y);
}
inline double slope(int a,int b){if(abs(p[a].x-p[b].x)<eps) return 1e20;else return (p[a].y-p[b].y)/(p[a].x-p[b].x);
}
int st[N],top;
void Solve(int l,int r){//printf("Solve %d %d\n",l,r);if(l==r){d[l]=max(d[l],d[l-1]);p[l].y=d[l]/(p[l].a*p[l].r+p[l].b);p[l].x=p[l].y*p[l].r;return;}int mid=(l+r)>>1,p1=l,p2=mid+1;for(int i=l;i<=r;i++){if(p[i].id<=mid) t[p1++]=p[i];else t[p2++]=p[i];}for(int i=l;i<=r;i++) p[i]=t[i];Solve(l,mid);top=0;for(int i=l;i<=mid;i++){while(top>1&&slope(st[top-1],st[top])<slope(st[top-1],i)+eps) top--;st[++top]=i;//printf("st %d\n",i);
    }//
    int j=1;for(int i=mid+1;i<=r;i++){while(j<top&&slope(st[j],st[j+1])+eps>p[i].k) j++;d[p[i].id]=max(d[p[i].id],p[st[j]].x*p[i].a+p[st[j]].y*p[i].b);}Solve(mid+1,r);p1=l;p2=mid+1;for(int i=l;i<=r;i++){if(p1<=mid&&( p2>r||cmp(p[p1],p[p2]) )) t[i]=p[p1++];else t[i]=p[p2++];}for(int i=l;i<=r;i++) p[i]=t[i];
}
int main(){//freopen("in","r",stdin);freopen("cash.in","r",stdin);freopen("cash.out","w",stdout);n=read();d[0]=read();for(int i=1;i<=n;i++)scanf("%lf%lf%lf",&p[i].a,&p[i].b,&p[i].r),p[i].k=-p[i].a/p[i].b,p[i].id=i;sort(p+1,p+1+n);Solve(1,n);//for(int i=1;i<=n;i++) printf("hi %d %d %lf\n",i,p[i].id,d[i]);printf("%.3lf",d[n]);return 0;
}

 

转载于:https://www.cnblogs.com/candy99/p/6435068.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集水井盖板图集07fj02_【干货】住宅通病详细图集(图文详解)

工序节点1建筑物外墙与散水坡、台阶、明沟留沉降缝图示&#xff1a;要求与做法&#xff1a;1、散水坡、台阶、明沟本身按≤6m长度(总长度均分)留沉降缝。2、外墙阴阳角位按450角留沉降缝。3、散水坡与台阶交接处留沉降缝分隔。工序节点2室外地面 伸缩缝图示&#xff1a;要求与…

最新发布!北京市机器人产业创新发展行动方案(2019-2022) “5432”推动北京机器人产业高质量发展...

来源&#xff1a;机器人大讲堂各有关单位&#xff1a;为贯彻《北京市加快科技创新发展智能装备产业的指导意见》&#xff0c;推动北京市机器人产业高质量发展&#xff0c;现将《北京市机器人产业创新发展行动方案&#xff08;2019—2022年&#xff09;》印发给你们&#xff0c;…

php png 输出,PHP直接输出一张图片代码写法

示例代码&#xff1a;public function img(){$img "https://file.zyku.net/p/b197f42c06ffff2e03bfbacee4ce94c4.jpg";$info getimagesize($img);$imgExt image_type_to_extension($info[2], false); //获取文件后缀$fun "imagecreatefrom{$imgExt}";$…

判别分析分为r型和q型吗_电流互感器天天见,但是你真正了解和知道它的一些注意事项吗?...

电流互感器也许你天天见&#xff0c;但是你真正了解电流互感器和它的一些注意事项吗&#xff1f;今天我就带大家一步步分析下电流互感器。一&#xff0c;定义&#xff0c;什么是电流互感器&#xff1f;电流互感器是根据电磁感应原理将一次侧大电流转换成二次侧小电流来测量或计…

刚刚,Science发布2019十大科学突破!

来源&#xff1a;中国生物技术网 北京时间12月20日&#xff0c;《Science》公布了今年的十大突破。“直视”黑洞图片来源&#xff1a;UNIVERSITY OF ARIZONA/INSTITUTE FOR ADVANCED STUDY图片来源&#xff1a;EHT COLLABORATION/CC 4.0巨大的、无处不在的黑洞&#xff0c;在某…

nginx php分离,nginx-php配置动静分离

实验目的&#xff1a;nginx-php配置动静分离实验环境&#xff1a;主机 192.168.88.100 NGINX服务器主机 192.168.88.102 PHP和MYSQL服务器注意&#xff1a;想要手工编译必须安装gcc gcc-c make 这三个插件并且关闭防火墙service firewalld stopsystemctl disable firewalld1.在…

模仿u-boot的makefile结构

u-boot&#xff08;2014.04&#xff09;是通过顶层makefile调用各子目录中的makefile来实现整个工程的编译的&#xff0c;实际上子目录的makefile是include进来的。这里仿照这种结构写个模板测试一下。 目录结构&#xff1a; mytest&#xff1a; add&#xff1a; mul&#xff1…

我国机器视觉企业体量偏小,上游零部件占利润大头

来源&#xff1a;仪商网根据中国机器视觉产业联盟(CMVU)调查统计&#xff0c;目前进入中国市场的国际机器视觉企业和中国本土的机器视觉企业(不包括代理商)都已经超过200家&#xff0c;产品代理商超过300家&#xff0c;专业的机器视觉系统集成商超过70家&#xff0c;覆盖全产业…

php 后端 轻量 框架,GitHub - 22cloud/mixphp: 轻量 PHP 框架,基于 Swoole 的常驻内存型 PHP 高性能框架 (开发文档完善)...

高性能 • 轻量级 • 命令行MixPHP 是什么MixPHP 秉承 "普及 PHP 常驻内存型解决方案&#xff0c;促进 PHP 往更后端发展" 的理念而创造&#xff0c;采用 Swoole 扩展作为底层引擎&#xff0c;围绕常驻内存的方式而设计&#xff0c;提供了 Web / Console 开发所需的众…

技术面试问项目难题如何解决的_技术创新 | 降本增效,青海农信社项目小伙刻苦钻研解决联合支架设计难题!...

革新READ随着建筑技术的进步&#xff0c;建筑内部功能和机电系统越来越多样&#xff0c;带来机电管线的数量成倍增加。为节约建筑空间&#xff0c;提高建筑净高&#xff0c;保证系统功能&#xff0c;提升履约品质&#xff0c;越来越多的项目选择采用联合支架的形式将各类管线集…

AI研究过于集中狭隘,我们是不是该反思了?

来源&#xff1a;AI科技大本营译者 | 陆离编辑 | 夕颜【导读】2019年是AI领域更加冷静的一年&#xff0c;少了些喧嚣和泡沫&#xff0c;大浪淘沙留下的是经过检验的真正的AI研究者、实践者。但是你也许没有发现&#xff0c;本来被寄予厚望要解决一切“疑难杂症”的AI&#xff0…

svchost占用内存过高_是什么导致你的Java服务器内存和CPU占用过高呢

一、内存占用过高1、造成服务器内存占用过高只有两种情况&#xff1a;内存溢出或内存泄漏(1)内存溢出&#xff1a;程序分配的内存超出物理内存的大小&#xff0c;导致无法继续分配物理内存&#xff0c;出现OOM报错。(2)内存泄漏&#xff1a;不再调用的对象一直占用着内存不释放…

Even Three is Odd

题意&#xff1a; 问题是对于所有的长度为n&#xff0c;且$1<ai<n$的整数序列求 $\prod_{i1}^{n-2}{max \{w_i,w_{i1},w_{i2}}\}$ 之和。 解法&#xff1a; 首先设dp状态为 $f(i,j,k)$ &#xff0c;长度为$i3$的&#xff0c;最大值为k&#xff0c;且最大值出现的位置集合…

中国图书评论协会2019年度“中国好书”

来源&#xff1a;腾讯网2019.12.16第1127次推送为读者发现好书&#xff0c;为好书寻找读者。“中国好书”月榜由我国权威的图书评测机构中国图书评论学会发布&#xff0c;志达书店经整理编辑&#xff0c;为您呈现“中国好书”2019年度榜单&#xff08;1-10月&#xff09;。寒假…

a标签居中 img vue,让html img图片垂直居中的三种方法

三种让img元素图片在盒子内垂直居中的方式教程&#xff0c;依据代码与文章教程熟习掌握并加以应用。一、使用flex完成垂直居中操纵css flex实现垂直居中。flex或许不是完成垂直居中最好的选择&#xff0c;由于IE8,9其实不赞成它。那时&#xff0c;为了用flex实现垂直居中&#…

python——面向对象相关

其他相关 一、isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 123456class Foo(object):passobj Foo()isinstance(obj, Foo)二、issubclass(sub, super) 检查sub类是否是 super 类的派生类 1234567class Foo(object):passclass Bar(Foo):passissubclass(Bar, Foo)三、异…

德国工业4.0眼里“工业互联网”与“智能制造”

来源&#xff1a;智造智库工业4.0在德国被认为是第四次工业革命&#xff0c;主要是指&#xff0c;在“智能工厂”利用“智能备”将“智能物料”生产成为“智能产品”&#xff0c;整个过程贯穿以“网络协同”&#xff0c;从而提升生产效率&#xff0c;缩短生产周期&#xff0c;降…

php 正则匹配静态资源,Struts2 配置静态资源文件不经过Strut处理(正则匹配)

Struts2框架有两个核心配置文件&#xff1a;struts.xml和Struts2默认属性文件default.properties(在struts2-core-2.3.20.jar中)default.properties可以通过自己在classpath下写一个struts.properties文件进行定制改写为什么是struts.properties&#xff0c;这可以看org.apache…

全球数字孪生市场大预测:2025 年的 358 亿美元,年复合增长率(CAGR)高达 37.8%...

来源&#xff1a;云头条 数字孪生市场估计将从2019年的38亿美元猛增到2025年的358亿美元&#xff0c;年复合增长率&#xff08;CAGR&#xff09;高达37.8%。推动数字孪生需求增长的几个因素包括&#xff1a;越来越广泛地采用物联网和云计算之类的技术用于实施数字孪生&#xff…

yii3正式版什么时候发布_事业单位联考结束,成绩什么时候发布?合格分数线怎么算?...

今天上午&#xff0c;2020下半年全国事业单位联考笔试结束了。笔试刚刚结束&#xff0c;很多考生问图图有没有此次联考的答案&#xff0c;那肯定得有啊。为了帮助各位考生更好估分&#xff0c;华图教育推出估分系统&#xff0c;各位考生只需点击文末“了解更多”即可参与估分。…