luogu
文章平均质量分 62
ddgo
给我高高飞起来啊!(ACM退役,转JAVA后端了)
展开
-
游走(luogu)(期望)
题目地址配套地址答案为sumcnt\frac{sum}{cnt}cntsum sum 为所有路径的总长度,cnt为所有路径的个数。题中信息可以得到,改图形是一个DAG,可以设f(i)表示以i为起点的所有路径的总长度之和,g(i)表示以i为起点的所有路径的个数。那么f(i)=∑j∈s(f(j)+g(j))f(i) = \sum_{j\in{s}}(f(j) + g(j))f(i)=∑j∈s(f(j)+g(j)) ,首先边长为1,对于f(j)中的所有路径,当变成由i为起点时,每个路径都要加1的长原创 2021-06-29 15:26:22 · 237 阅读 · 0 评论 -
绿豆蛙的归宿(luogu)(期望DP)
题目地址配套地址逆向:设E(i) 表示到i点到n点还需要的期望步数仅考虑 x -> y这一条边,边权为w。设 y 点所连的各个点的边权为l1,l2,...,lnl_1,l_2,... ,l_nl1,l2,...,ln,概率为p1,p2,...,pnp_1,p_2,...,p_np1,p2,...,pn那么 E(y) = p1l1+p2l2+...+pnlnp_1l_1 + p_2l_2 + ... + p_nl_np1l1+p2l2+...+pnlnE(x) =原创 2021-06-29 10:58:59 · 262 阅读 · 1 评论 -
线段树2(洛谷p3373)(线段树)
题目地址解释多了一个乘法操作,可以考虑优先级。每次先算乘法。首先,对于一个区间(和为s) 假设已经按 +a , 乘b进行了操作。值得到的值为( (s + a) * b )-> sb + ab 假设先乘得到(sb + a )这样相比,add应该还要再乘上一个b才对,所以,当更新到一个区间时,为了进行先乘的操作而不让结果发生变化,应该将add乘上当前乘的值。 这个就是update里面更新乘法时候应该进行的操作。push_down也是这样更新子区间的add,mul直接乘上。初始状态mul为1原创 2021-03-06 14:07:26 · 146 阅读 · 0 评论 -
三元上升子序列(洛谷p1637)(树状数组/线段树)(扩展k元上升子序列)
题目地址预处理l[i],r[i]表示左边比它小的和右边比它大的的个数。显然,可以用树状数组或者线段树随着枚举,更新区间的值,然后查询一个区间的和,即可以得到l[],r[]。最后ans += l[i]*r[i].线段树#include<iostream>#include<algorithm>#include<vector>using namespace std;const int N = 3e4 + 10;typedef long long ll;in原创 2021-03-05 14:33:41 · 198 阅读 · 0 评论 -
分治法解 最近点对问题 (画图证明)
1: 暴力枚举两两之间点的距离。 O(n^2);2: 分治法。与合并(归并)排序类似。分解: 先把所有点按x 升序排序。 再取mid = (l+r) /2;解决: 左右(返回d1,d2)两边分别递归下去,直到 1 或 2 可以直接返回值。 我们 取 mi = min(d1,d2);表示当前最小的距离。合并: 对于分开的两个区间,可能会存在着最短距离的两个点分别在分开的左右两边。所以我们要特殊处理这种情况。我们按当前 l - r 的区间里面的点 按 y 升序排序(在这里我们可以运用归并排序的一部原创 2020-10-05 17:52:07 · 817 阅读 · 0 评论 -
洛 p5662 纪念品(完全背包)
卖了这个物品的当天,当天也可以买。 这样只需判断如果前一天比今天的价格低,前一天就买来赚差价。 存下满足的物品(也可以不存,后面直接特判也一样)vector<int> ve;for(int j=1;j<=m;j++) if(w[i1][j]-w[i1-1][j] > 0) ve.push_back(j);重点是,当有多个物品满足这个条件时,应该怎么做。这里直接翻译一下。多个物品,且每个物品在金钱允许范围内任意选,求任意选的物品的组合赚的差价最大值。这就是完全背包。原创 2020-07-11 15:23:56 · 222 阅读 · 0 评论