LOJ#2353 货币兑换

CDQ分治优化斜率优化DP。
有个结论就是每天买完卖完....知道这个之后考虑今天卖的是哪天买的就能写出n²DP了。
发现形式是fi = max(aibj + cidj)的形式。我们可以把ci除出来,就是斜率优化了。
然后发现横坐标和斜率全部没有单调性,于是CDQ分治搞一搞。
#include <bits/stdc++.h> const int N = ;
const long double eps = 1e-; long double a[N], b[N], c[N], R[N], f[N], s, k[N], v[N], w[N];
int n, node[N], t[N], stk[N], top; template <class T> inline void Max(T &a, const T &b) {
a < b ? a = b : ;
return;
} inline bool cmp_k(const int &a, const int &b) {
return k[a] < k[b];
} inline bool cmp_w(const int &a, const int &b) {
return w[a] < w[b];
} inline bool check(int a, int b, int c) {
if((v[b] - v[a]) * (w[c] - w[b]) + eps >= (v[c] - v[b]) * (w[b] - w[a])) {
return ;
}
return ;
} void CDQ(int l, int r) { //printf("CDQ : l = %d r = %d \n", l, r); if(l == r) {
if(r > ) f[r] *= b[r];
Max(f[r], f[r - ]);
v[r] = -f[r] / c[r];
w[r] = -v[r] * R[r];
//std::cout << "v[i] = " << v[r] << std::endl;
//printf("f = %.3f \n", f[r]);
return;
}
int mid = (l + r) >> ;
CDQ(l, mid); /// update
memcpy(t + l, node + l, (r - l + ) * sizeof(int));
std::sort(t + l, t + mid + , cmp_w);
std::sort(t + mid + , t + r + , cmp_k);
// build convex
stk[top = ] = t[l];
if(mid - l + >= ){
stk[++top] = t[l + ];
for(int i = l + ; i <= mid; i++) {
while(top > && check(stk[top - ], stk[top], t[i])) {
top--;
}
stk[++top] = t[i];
}
}
// update f
//printf("top = %d \n", top);
int head = ;
for(int i = mid + ; i <= r; i++) {
int x = t[i];
while(head < top && (v[stk[head]] - v[stk[head + ]]) / (w[stk[head]] - w[stk[head + ]]) + eps < k[x]) {
head++;
}
int y = stk[head];
//printf("Max %.3f %.3f * %.3f \n", f[x], -v[y], (R[y] * a[x] + b[x]));
//Max(f[x], -v[y] * (R[y] * a[x] + b[x]));
Max(f[x], w[y] * k[x] - v[y]);
} CDQ(mid + , r);
return;
} int main() { //freopen("in.in", "r", stdin);
//freopen("my.out", "w", stdout); scanf("%d%Lf", &n, &s);
for(int i = ; i <= n; i++) {
scanf("%Lf%Lf%Lf", &a[i], &b[i], &R[i]);
c[i] = a[i] * R[i] + b[i];
//std::cout << "c[i] = " << c[i] << std::endl;
k[i] = a[i] / b[i];
node[i] = i;
} f[] = s; CDQ(, n); printf("%.3Lf\n", f[n]);
return ;
}
AC代码
eps很重要...
LOJ#2353 货币兑换的更多相关文章
- loj#2353. 「NOI2007」 货币兑换 斜率优化
题意略 题解:可以列出dp方程\(dp[i]=max(dp[j]*{\frac{a[i]*c[j]+b[i]}{a[j]*c[j]+b[j]}}\),化简可以得到\(\frac{dp[i]}{b[i] ...
- LOJ 2353 & 洛谷 P4027 [NOI2007]货币兑换(CDQ 分治维护斜率优化)
题目传送门 纪念一下第一道(?)自己 yy 出来的 NOI 题. 考虑 dp,\(dp[i]\) 表示到第 \(i\) 天最多有多少钱. 那么有 \(dp[i]=\max\{\max\limits_{ ...
- loj2353. 「NOI2007」 货币兑换
loj2353. 「NOI2007」 货币兑换 链接 https://loj.ac/problem/2353 思路 题目不重要,重要的是最后一句话 提示 输入文件可能很大,请采用快速的读入方式. 必然 ...
- 【BZOJ-1492】货币兑换Cash DP + 斜率优化 + CDQ分治
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 3396 Solved: 1434[Submit][Sta ...
- BZOJ 1492: [NOI2007]货币兑换Cash( dp + 平衡树 )
dp(i) = max(dp(i-1), x[j]*a[i]+y[j]*b[i]), 0<j<i. x, y表示某天拥有的最多钱去买金券, 金券a和金券b的数量. 然后就很明显了...平衡 ...
- bzoj1492[NOI2007]货币兑换Cash cdq分治+斜率优化dp
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 5541 Solved: 2228[Submit][Sta ...
- [Noi2016]区间 BZOJ4653 洛谷P1712 Loj#2086
额... 首先,看到这道题,第一想法就是二分答案+线段树... 兴高采烈的认为我一定能AC,之后发现n是500000... nlog^2=80%,亲测可过... 由于答案是求满足题意的最大长度-最小长 ...
- Loj #2192. 「SHOI2014」概率充电器
Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...
- Loj #3096. 「SNOI2019」数论
Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...
随机推荐
- 在linux命令下访问url
1.elinks - lynx-like替代角色模式WWW的浏览器 例如: elinks --dump http://www.baidu.com 2.wget 这个会将访问的首页下载到本地 [root ...
- Java内存泄漏分析
https://www.javatang.com/archives/2017/11/08/11582145.html?tdsourcetag=s_pcqq_aiomsg
- Django--权限信息操作
一 . 权限控制 表结构的设计 rbca(Role Based Access Control) 基于角色的权限控制 3个model 5张表 class User(models.Model): # ...
- 莫烦scikit-learn学习自修第四天【内置训练数据集】
1. 代码实战 #!/usr/bin/env python #!_*_ coding:UTF-8 _*_ from sklearn import datasets from sklearn.linea ...
- orcale三表连接查询
SELECT w.ZDBH,w.HEATINGANDAIRCONDITIONERID, w.ZDMC, w.CZBH, w.CZMC, w.CNXS, w.ND, w.KTJF, w.K ...
- SQL Server 一张图让你秒懂联合表查询
- bzoj-1191(二分图最大匹配)
解题思路:比较裸的一道题,直接跑匈牙利就行了,但是要注意一点,这个兔崽子是在闯关,一道题回答不出来就没了,直接在题目循环那里加一个else break;就行了!!!; #include<iost ...
- Nginx 针对建立TCP连接优化
L:124 sysctl -a | grep file-max //通过命令查看系统最大句柄数 [root@3 ~]# sysctl -a | grep file-max fs.file-max = ...
- Nginx http keepalive针对客户端行为指令
keepalive 描述 多个http请求可以复用Tcp链接 减少握手次数 通过减少并发连接数减少服务器资源消耗 降低Tcp拥塞控制影响 Syntax: keepalive_disable none ...
- Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——
本节中我们通过创建几何空间点.曲面和采样线了解Civil 3D对象的创建方法.因Civil 3D对象的创建方法相比AutoCAD对象创建要简单的多,比如创建一个几何空间点,最简单的情况采用一行代码(没 ...