当前位置: 首页 > news >正文

Solution - P4027 [NOI2007] 货币兑换

【模板】李超线段树优化斜率优化 DP。(什么烂名字)

注意到题给条件说每次都可以把 钱 / 金券 换完。金券信息是不好存储的,于是我们规定 \(\mathrm{dp}_i\) 表示在第 \(i\) 天最多能赚到多少钱。dp 时枚举上一次把钱换成金券的时间。换金券应该是很好算的,推一下就出来了。

那么有转移 \(\mathrm{dp}_i = \max\{a_ic_j+b_id_j\} = b_i\max\{c_i \frac{a_i}{b_i} + d_j\}\),其中 \(c, d\) 是第 \(j\) 天换到的两种金券的数量。

用李超树维护斜率优化 DP 即可。

#include <bits/stdc++.h>
#define llong long long
#define N 100005
using namespace std;constexpr double eps = 1e-7;
inline int cmp(double a, double b){if(fabs(a-b) < eps) return 0;return a>b ? 1 : -1;
}int n; double s;
double a[N], b[N], r[N]; int k[N];
double dp[N], tmp[N]; int cnt;struct Seg{double k, b; bool vis;};
#define gety(s,x) (s.k*(x)+s.b)Seg val[N<<2];
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
#define mid ((l+r)>>1)
inline void insert(Seg k, int x = 1, int l = 1, int r = cnt){if(!val[x].vis){val[x] = k;return;}Seg s1 = val[x], s2 = k;if(cmp(gety(s1, tmp[mid]), gety(s2, tmp[mid])) < 0) swap(s1, s2);val[x] = s1;if(cmp(gety(s1, tmp[l]), gety(s2, tmp[l])) < 0) insert(s2, ls(x), l, mid  );if(cmp(gety(s1, tmp[r]), gety(s2, tmp[r])) < 0) insert(s2, rs(x), mid+1, r);return;
}
inline double query(int pos, int x = 1, int l = 1, int r = cnt){double res = -1e18;if(val[x].vis) res = gety(val[x], tmp[pos]);if(l == r) return res;if(pos <= mid) res = max(res, query(pos, ls(x), l, mid  ));else           res = max(res, query(pos, rs(x), mid+1, r));return res;
}int main(){scanf("%d %lf", &n, &s);for(int i = 1; i <= n; ++i){scanf("%lf %lf %lf", &a[i], &b[i], &r[i]);tmp[++cnt] = a[i]/b[i];}sort(tmp+1, tmp+cnt+1);cnt = unique(tmp+1, tmp+cnt+1, [&](double a, double b){return fabs(a-b)<eps;})-tmp-1;for(int i = 1; i <= n; ++i)k[i] = upper_bound(tmp+1, tmp+cnt+1, a[i]/b[i]+eps)-tmp-1;dp[0] = s;for(int i = 1; i <= n; ++i){dp[i] = max(dp[i-1], b[i]*query(k[i]));insert((Seg){(dp[i]*r[i])/(a[i]*r[i]+b[i]), dp[i]/(a[i]*r[i]+b[i]), true});}printf("%.7f", dp[n]);return 0;
}
http://www.jsqmd.com/news/381291/

相关文章:

  • 5 分钟理解一致性哈希算法
  • 常见问题解决 --- 无华为环境下如何安装华为pixlab b5打印机驱动
  • JVM GC 耗时频频升高,这次排查完想说:还有谁?
  • 2026年2月不错的代办公司推荐,排行情况揭秘,代办营业执照/代办公司/注册公司/公司注册/资质代办,代办公司找哪家 - 品牌推荐师
  • 植入式脑机接口中电极数多多益善还是少即是多,哪条技术路线胜出?
  • 一个HTTP请求的曲折经历
  • 【程序源代码】蜜雪冰城微信小程序(含小程序源码)
  • 感知无界创造有形:百灵全模态 Ming-flash-omni-2.0 焕新生活想象
  • Flutter框架跨平台鸿蒙开发——Future基础与资料加载
  • 构建之法笔记三
  • OpenClaw狂跑两周,打醒了硬件和Agent厂商
  • vue3的ref响应式,取值的时候自动补全value的设置,以及两种修改方式
  • 程序员修炼之道笔记二
  • 中西医执医冲刺卷哪个好?推荐阿虎医考 - 医考机构品牌测评专家
  • 构建之法笔记二
  • 基于WPF的折线图和仪表盘实现
  • 一戴一护,方盾守护每一次呼吸
  • CF2194E The Turtle Strikes Back
  • 电子产品结构(减重)做拓扑优化设计
  • 2026年2月安徽阳台壁挂太阳能热水器批发厂家,本地服务快速响应 - 品牌鉴赏师
  • 程序员修炼之道笔记三
  • Seedance 2.0终结比赛
  • 分布式与集群的区别究竟是什么?
  • 干货分享:手把手教你计算自然对流中的流体速度公式、步骤与实例
  • Nanobot+OpenClaw+MySQL:智能数据库管理工具开发指南
  • GEO时代,这些“隐形变量”正在深度影响AI推荐
  • OpenAI 深夜王炸!GPT-5.3 极速版发布,更甩出 10 条 Agent“保命”军规
  • 最近发布的typescript 6.0有什么新能力
  • ChatGLM3-6B在电商场景的应用:智能客服系统
  • NBE | 薛宇团队突破传统解读瓶颈:人工智能混合框架“蓝猫”为海量组学数据注入“常识”与“机制”灵魂