传送门: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. [RK3288][Android6.0] 调试笔记 --- eMMC分区号和名字的对应【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/77318410 Platform: Rockchip OS: Android 6.0 Kern ...

  2. jquery特效(1)—点击展示与隐藏全文

    下班了~~~我把今天整理的一个jquery小特效发一下,个人觉得比较简单,嗖嗖的就写出来了~~~ 下面先来看最终的动态效果: 一.来看一下主体框架程序: <!DOCTYPE html> & ...

  3. C#入门---2、C#装备知识(C#创建桌面程序的时候创建的是什么应用程序)

    C#入门---2.C#装备知识(C#创建桌面程序的时候创建的是什么应用程序) 一.总结 一句话总结: WPF应用程序:来替代 WindowsFroms 来创建桌面应用程序 1.什么是控制台程序 Con ...

  4. Canvas HTML5

    不支持的时候记得: <canvas id="stockGraph" width="150" height="150"> curr ...

  5. 【转载】Java的接口和抽象类

    尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3811437.html 也不知道,面试为什么经常用到这个知识点—— 一.抽象类 在了 ...

  6. codeforces 702C C. Cellular Network(水题)

    题目链接: C. Cellular Network time limit per test 3 seconds memory limit per test 256 megabytes input st ...

  7. SecureCRT自动备份脚本-思科

    利用SecureCRT脚本对思科设备进行批量备份: (1)新建文本文件(注意保存路径,本次测试路径为D:\backup\list.txt): x.x.x.x username password ena ...

  8. 「LuoguP2252」 取石子游戏(威佐夫博弈

    [P2252]取石子游戏 - 洛谷 题目背景 无 题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以 ...

  9. 「USACO16OPEN」「LuoguP3147」262144(区间dp

    P3147 [USACO16OPEN]262144 题目描述 Bessie likes downloading games to play on her cell phone, even though ...

  10. 点分治 [IOI2011]Race

    BZOJ2599. 放板子.利用agc009-D 代码简洁了很多 #include <bits/stdc++.h> #define N 200005 using namespace std ...