题目传送门 纪念一下第一道(?)自己 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])\),假设…
[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]} {…
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…
题面传送门 首先很明显我们会按照 \(d_i\) 的顺序从小到大买这些机器,故不管三七二十一先将所有机器按 \(d_i\) 从小到大排序. 考虑 \(dp\),\(dp_i\) 表示在时刻 \(d_i\) 及以前卖掉手头的机器,最多能剩下多少钱. 转移显然就枚举上一个购买的机器编号 \(j\),即 \(dp_i=\max\limits_{j=1}^{i-1}dp_j-p_j+g_j(d_i-d_j-1)+r_j\),其中 \(j\) 可以转移到 \(i\) 当前仅当 \(dp_j\geq p_j…
P4027 [NOI2007]货币兑换 题目描述 小 \(Y\) 最近在一家金券交易所工作.该金券交易所只发行交易两种金券:\(A\) 纪念券(以下简称 \(A\) 券)和 \(B\) 纪念券(以下简称 \(B\) 券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个实数. 每天随着市场的起伏波动,两种金券都有自己当时的价值,即每一单位金券当天可以兑换的人民币数目.我们记录第 \(K\) 天中 \(A\) 券和 \(B\) 券的价值分别为 \(A_K\) 和 \(B_K\) (元/单…
题意 题目链接 Sol 解题的关键是看到题目里的提示... 设\(f[i]\)表示到第\(i\)天所持有软妹币的最大数量,显然答案为\(max_{i = 1}^n f[i]\) 转移为\(f_i = max(f_{i - 1}, A_i \frac{f_j R_j}{A_j R_j + B_j} + B_i \frac{f_j}{A_j R_j + B_j})\) 变形一下: \[\frac{f_i}{B_i} - \frac{f_j}{A_j R_j + B_j} = \frac{A_i}{B…
洛谷P3810 陌上花开 传送门 题解: CDQ分治模板题. 一维排序,二维归并,三维树状数组. 核心思想是分治,即计算左边区间对右边区间的影响. 代码如下: #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 200005; int n, k, m; struct node{ int x, y, z, id, w; bool operator < (const node &a…
还是照着CDQ的思路来. 但是有一些改动: 要求4个方向的,但是可爱的CDQ分治只能求在自己一个角落方向上的.怎么办?旋转!做4次就好了. 统计的不是和,而是——max!理由如下: 设当前点是(x,y),目标点是(x',y'),那么所求的|x-x'|+|y-y'|首先用旋转大法化为x-x'+y-y',然后我们发现这个东西其实就是x+y-x'-y'=(x+y)-(x'+y'),而x+y我们是已知的.所以我们求一下max(x'+y')即可.具体实现是对树状数组魔改. 然后交上去发现狂T不止... 疯…
首先每次买卖一定是在某天 $k$ 以当时的最大收入买入,再到第 $i$ 天卖出,那么易得方程: $$f_i = \max \{\frac{A_iRate_kf_k}{A_kRate_k + B_k} + \frac{B_if_k}{A_kRate_k + B_k}\}$$ 再令 $$\left\{\begin{aligned} x_k = \frac{Rate_kf_k}{A_kRate_k + B_k} \\ y_k = \frac{f_k}{A_kRate_k + B_k}\end{alig…
原题 定义一个点比另一个点大为当且仅当这个点的三个值分别大于等于另一个点的三个值.每比一个点大就为加一等级,求每个等级的点的数量. 显然的三维偏序问题,CDQ的板子题. CDQ分治: CDQ分治是一种特殊的分治方法,在 OI 界初见于陈丹琦 2008 年的集训队作业中,因此被称为 CDQ 分治. CDQ分治是将操作分治,用于解决"修改独立,允许离线"的问题.本质为按时间分治. 可以用CDQ的题目必须满足: 1.修改与询问互相独立,且修改之间互不影响 2.允许离线 那么我们将操作序列分为…