传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1492

推荐博客:http://www.cnblogs.com/zig-zag/archive/2013/04/24/3039418.html

保存cdq分治模版代码。

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath> const int maxn = 100005;
const double eps = 1e-9, inf = 1e300; int n, s;
double a[maxn], b[maxn], rate[maxn], f[maxn]; struct point {
double x, y;
int id;
bool operator<(const point & rhs) const {
if (fabs(x - rhs.x) < eps) {
return y > rhs.y + eps;
}
return x + eps < rhs.x;
}
} stk[maxn], p[maxn], np[maxn];
struct query {
double k;
int id;
} q[maxn], tq[maxn]; bool cmp(const query & aa, const query & ss) {
return aa.k > ss.k;
}
inline double getk(const point & aa, const point & ss) {
if (fabs(aa.x - ss.x) < eps) {
return -inf;
}
return (ss.y - aa.y) / (ss.x - aa.x);
} void slove(int left, int right) {
if (left == right) {
f[left] = std::max(f[left], f[left - 1]);
p[left].y = f[left] / (a[left] * rate[left] + b[left]);
p[left].x = p[left].y * rate[left];
return;
} int mid = (left + right) >> 1, idx1 = left, idx2 = mid + 1;
for (int i = left; i <= right; ++i) {
if (q[i].id <= mid) {
tq[idx1++] = q[i];
}
else {
tq[idx2++] = q[i];
}
}
memcpy(q + left, tq + left, sizeof(query) * (right - left + 1)); slove(left, mid); int top = 0;
stk[top++] = p[left];
for (int i = left + 1; i <= mid; ++i) {
while (top > 1 && getk(p[i], stk[top - 1]) > getk(stk[top - 1], stk[top - 2]) + eps) {
--top;
}
stk[top++] = p[i];
} int j = 0;
for (int i = mid + 1; i <= right; ++i) {
while (j < top - 1 && getk(stk[j], stk[j + 1]) > q[i].k + eps) {
++j;
}
f[q[i].id] = std::max(f[q[i].id], stk[j].x * a[q[i].id] + stk[j].y * b[q[i].id]);
} slove(mid + 1, right); idx1 = left, idx2 = mid + 1;
for (int i = left; i <= right; ++i) {
if (idx1 <= mid && (p[idx1] < p[idx2] || idx2 > right)) {
np[i] = p[idx1++];
}
else {
np[i] = p[idx2++];
}
}
memcpy(p + left, np + left, sizeof(point) * (right - left + 1));
} int main(void) {
scanf("%d%d", &n, &s);
f[0] = (double)s;
for (int i = 1; i <= n; ++i) {
scanf("%lf%lf%lf", a + i, b + i, rate + i);
q[i] = (query){-a[i] / b[i], i};
} std::sort(q + 1, q + n + 1, cmp);
slove(1, n);
printf("%.3lf\n", f[n]);
return 0;
}

  

bzoj1492 [NOI2007]货币兑换Cash【cdq分治】的更多相关文章

  1. [BZOJ1492] [NOI2007] 货币兑换Cash(cdq分治+斜率优化)

    [BZOJ1492] [NOI2007] 货币兑换Cash(cdq分治+斜率优化) 题面 分析 dp方程推导 显然,必然存在一种最优的买卖方案满足:每次买进操作使用完所有的人民币:每次卖出操作卖出所有 ...

  2. bzoj1492[NOI2007]货币兑换Cash cdq分治+斜率优化dp

    1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 5541  Solved: 2228[Submit][Sta ...

  3. BZOJ1492: [NOI2007]货币兑换Cash(CDQ分治,斜率优化动态规划)

    Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个 ...

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

    传送门 题意:不想写... 扔链接就跑 好吧我回来了 首先发现每次兑换一定是全部兑换,因为你兑换说明有利可图,是为了后面的某一天两种卷的汇率差别明显而兑换 那么一定拿全利啊,一定比多天的组合好 $f[ ...

  5. BZOJ 1492 [NOI2007]货币兑换Cash (CDQ分治/splay 维护凸包)

    题目大意:太长了略 splay调了两天一直WA弃疗了 首先,我们可以猜一个贪心,如果买/卖,就一定都买/卖掉,否则不买/卖 反正货币的行情都是已知的,没有任何风险,所以肯定要选择最最最优的方案了 容易 ...

  6. [BZOJ1492][NOI2007]货币兑换Cash(斜率优化+CDQ分治)

    1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 5838  Solved: 2345[Submit][Sta ...

  7. BZOJ1492: [NOI2007]货币兑换Cash 【dp + CDQ分治】

    1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 5391  Solved: 2181 [Submit][S ...

  8. [BZOJ1492] [NOI2007]货币兑换Cash 斜率优化+cdq/平衡树维护凸包

    1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 5907  Solved: 2377[Submit][Sta ...

  9. bzoj千题计划237:bzoj1492: [NOI2007]货币兑换Cash

    http://www.lydsy.com/JudgeOnline/problem.php?id=1492 dp[i] 表示 第i天卖完的最大收益 朴素的dp: 枚举从哪一天买来的在第i天卖掉,或者是不 ...

随机推荐

  1. Vue.js的动态组件模板

    组件并不总是具有相同的结构.有时需要管理许多不同的状态.异步执行此操作会很有帮助. 实例: 组件模板某些网页中用于多个位置,例如通知,注释和附件.让我们来一起看一下评论,看一下我表达的意思是什么.评论 ...

  2. codeforces 509 B题 Painting Pebbles

    转载地址:http://blog.csdn.net/nike0good/article/details/43449739 B. Painting Pebbles time limit per test ...

  3. ping请求超时的解决方法

    我们有时需要进行远程或者共享对方数据库的时候,会ping一下对方电脑,时候能够ping通,时候能够进行数据的传输.有时会出现ping请求超时,那么遇到这个问题该怎么解决? 我们首要解决的是看他自己是否 ...

  4. html5 3D圣诞树源码

    1. [代码][HTML]代码   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http ...

  5. CKEDITOR 默认最大化

    createEditor("newsEditer"); //创建一个editer //editer 最大化 CKEDITOR.instances["newsEditer& ...

  6. [转载]Android版本更新与JSON解析

    /*  *注意,这篇文章转载自:  *http://blog.csdn.net/xjanker2/article/details/6303937  *一切权利归作者所有,这里只是转载,曾经用到过这篇文 ...

  7. Linux vSphere SDK for Perl 执行脚本报错

      本人在gentoo系统上安装完vSphere for Perl之后,执行/usr/lib/vmware-viperl/app/vm/vminfo.pl脚本. 提示错误如下: Server vers ...

  8. BZOJ2599:[IOI2011]Race

    浅谈树分治:https://www.cnblogs.com/AKMer/p/10014803.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem. ...

  9. bzoj1012最大数maxnumber——单调栈

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1012 单调栈水题:用了一下lower_bound二分. 代码如下: #include< ...

  10. TX1 ssh配置

    执行: sudo apt-get install openssh-server 验证: sudo ps -e |grep ssh 回车-->有sshd,说明ssh服务已经启,如果没有则输入命令s ...