noi2007专题

CDQ分治维护凸包 优化dp 【NOI2007】货币兑换cash bzoj1492

题目描述: 小 Y 最近在一家金券交易所工作。该金券交易所只发行交易两种金券:A 纪 念券(以下简称 A 券)和 B 纪念券(以下简称 B 券)。每个持有金券的顾客都有 一个自己的帐户。金券的数目可以是一个实数。 每天随着市场的起伏波动,两种金券都有自己当时的价值,即每一单位金券 当天可以兑换的人民币数目。我们记录第 K 天中 A 券和 B 券的价值分别为 AK 和 BK (元/单位金

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

点击这里查看原题 首先贪心的想,每次买卖必然要买空或者卖空,因为有便宜就尽量去占,于是可以得到方程: f[i]=max{f[j]/(a[j]*rate[j]+b[j])*rate[j]*a[i]+f[j]/(a[j]*rate[j]+b[j])*b[i]} 其中,x[j]=f[j]/(a[j]*rate[j]+b[j])*rate[j]表示第j天最多可以拥有的A货币的数量,y[j]=f

bzoj1491 NOI2007 社交网络[floyed]

1491: [NOI2007]社交网络 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1563 Solved: 876 [Submit][Status][Discuss] Description 在社交网络(socialnetwork)的研究中,我们常常使用图论概念去解释一些社会现象。不妨看这样的一个问题。 在一个社交圈子里有n个人,人与

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

这种分治思想我也是醉了Orz 首先对于这道题 我们可以发现 如果某一天你要买进或卖出 那一定是尽可能的买或卖 那么我们就可以用一个状态f[i]表示某一天的最大收益 那么就有 f[i] = (rate[j] * f[j] * a[i] + f[j] * b[i]) / (rate[i] * a[i] + b[i] 那么朴素转移就很容易了 怎样优化呢 令  y[j] = f[j] / (r

P2047 [NOI2007] 社交网络

Portal. 观察到数据范围 n ≤ 100 n\leq 100 n≤100,考虑用 Floyd。 在 Floyd 更新最短路的过程中,如果以当前结点为中转点的路径更新过,那么可以累加答案;否则,更新最短路径并重置答案。 统计答案时,枚举中转点判断累加即可。 #include <bits/stdc++.h>using namespace std;#define int long l