斜率在转移顺序下不满足单调性的斜率优化\(DP\),用动态凸包来维护.送命题. 简化版题意:每次在凸包上插入一个点,以及求一条斜率为\(K\)的直线与当前凸包的交点.思路简单实现困难. \(P.s\),不是特别建议用\(Set\)来维护动态凸包,万一中间哪一点功能实现\(STL\)没有提供就\(GG\)了.(比如要有两种比较运算符.)本人因此重构了三次\(:)\) 代码来源:黄学长的代码的魔改版. #include <bits/stdc++.h> using namespace std; co…
传送门 解题思路 题目里有两句提示一定要看清楚,要不全买要不全卖,所以dp方程就比较好列,f[i]=max(f[j]*rate[j]*a[i])/(rate[j]*a[j]+b[j])+(f[j]*b[i])/(rate[j]*a[j]+b[j]),意义就是在从前面的某一天买入,这一天卖出,时间复杂度O(n^2),这样只有60分,,考虑优化.设在j这天a买入了x[j]股,则x[j]=(rate[j]*f[j])/(rate[j]*a[j]+b[j]),b买入了y[j]股,则y[j]=rate[j…
[NOI2007]货币兑换 LG传送门 妥妥的\(n \log n\)cdq做法. 这题用cdq分治也可以\(n \log n\)但是在洛谷上竟然比一些优秀的splay跑得慢真是见了鬼了看来还是人丑常数大的问题 先推式子 (这一段与其他题解不会有太多不同,已经了解了的同学可以略过,注意一下转移中\(x\)和\(k\)表示什么就行了.) 设\(f[i]\)表示到第\(i\)天最多有多少钱,\(g[i]\)表示用第\(i\)天时的钱最多能买多少B券,易知\(g[i] = \frac {f[i]} {…
第一次打动态凸包维护dp,感觉学到了超级多的东西. 首先,set是如此的好用!!!可以通过控制一个flag来实现两种查询,维护凸包和查找斜率k 不过就是重载运算符和一些细节方面有些恶心,90行解决 后面还有一个cdq分治,找时间学下,看下能不能处理一大类恶心的问题 github还是不会用,找时间搞下吧 CODE: #include<cstdio> #include<cstring> #include<algorithm> #include<iostream>…
P4027 [NOI2007]货币兑换 显然,如果某一天要买券,一定是把钱全部花掉.否则不是最优(攒着干啥) 我们设$f[j]$为第$j$天时用户手上最多有多少钱 设$w$为花完钱买到的$B$券数 $f[j]=R_{j}*w*A_{j}+w*B_{j}$ $w=f[j]/(R_{j}*A_{j}+B_{j})$ 在第$i$天的转移方程: $f[i]=R_{j}*w*A_{i}+w*B_{i}$ $w*B_{i}=-R_{j}*w*A_{i}+f[i]$ $w=-A_{i}/B_{i}*R_{j}…
P4027 [NOI2007]货币兑换 题目描述 小 \(Y\) 最近在一家金券交易所工作.该金券交易所只发行交易两种金券:\(A\) 纪念券(以下简称 \(A\) 券)和 \(B\) 纪念券(以下简称 \(B\) 券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个实数. 每天随着市场的起伏波动,两种金券都有自己当时的价值,即每一单位金券当天可以兑换的人民币数目.我们记录第 \(K\) 天中 \(A\) 券和 \(B\) 券的价值分别为 \(A_K\) 和 \(B_K\) (元/单…
P4027 [NOI2007]货币兑换 算法:dp+斜率优化 题面十分冗长,题意大概是有一种金券每天价值会有变化,你可以在某些时间点买入或卖出所有的金券,问最大收益 根据题意,很容易列出朴素的状态转移方程: 设\(f_i\)为第\(i\)天B券的数量,\(ans_j\)为以当前价格卖光第\(j\)天的金券可获得的收益,则 \(f_i=\max{ans_j}/(a_i*r_i+b_i)\) \(O(n)\)求\(\max{ans_j}\),复杂度为\(O(n^2)\) #include<iostr…
BZOJ_1492_[NOI2007]货币兑换Cash_CDQ分治+斜率优化 Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个实数.每天随着市场的起伏波动,两种金券都有自己当时的价值,即每一单位金券当天可以兑换的人民币数目.我们记录第 K 天中 A券 和 B券 的价值分别为 AK 和 BK(元/单位金券).为了方便顾客,金券交易所提供了一种非常方便…
题目传送门 纪念一下第一道(?)自己 yy 出来的 NOI 题. 考虑 dp,\(dp[i]\) 表示到第 \(i\) 天最多有多少钱. 那么有 \(dp[i]=\max\{\max\limits_{j=1}^{i-1}a[i]*(dp[j]/(a[j]*r[j]+b[j])*r[j])+b[i]*dp[j]/(a[j]*r[j]+b[j]),dp[i-1]\}\) 我们稍微观察一下,里面那个式子似乎能写成斜率优化的样子: 令 \(t[j]=dp[j]/(a[j]*r[j]+b[j])\),假设…
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec  Memory Limit: 64 MB Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个实数.每天随着市场的起伏波动, 两种金券都有自己当时的价值,即每一单位金券当天可以兑换的人民币数目.我们记录第 K 天中 A券 和 B券 的 价值分别为 AK 和 BK(元/…