摘要:
喵了个喵 题解 磁带存储 有 \(n\) 个磁带,每个片段有两个参数:时长 \(t_i\) 和频率 \(a_i\)。以某种顺序把片段排在磁带里,每个片段的花费为(播放完这个片段的时刻)乘以(该片段的频率) 求最小花费和。 因为两个片段交换,对之后没有影响。 所以可以考虑一个顺序中,如果 \(x,x+ 阅读全文
摘要:
菜肴制作 要求把 \(1\sim n\) 排序,满足给定的所有条件,满足条件之后,编号越小要越靠前。(满足条件情况下,先让 1 最靠左,然后让 2 ……) 每个条件会给出两个数 \(a,b\),表示 \(a\) 必须在 \(b\) 之前。 解: 看起来很像拓扑排序。于是我们对于每个条件 \(a,b\ 阅读全文
摘要:
OI 中的组合,基本指组合计数。组合极值一般是贪心题或者 dp 题。 【组合数】 组合数 \(C^m_n=(^n_m)\)。 注意:求逆元前,请一定判断清楚,是否可能不存在逆元!!! \(C^m_n = C^m_{n-1}+C^{m-1}_{n-1}\)。 c[n][m] = c[n - 1][m] 阅读全文
摘要:
数论:研究数与数之间的关系。如带余除法、因数倍数、同余整除等都是数论。 【筛法】 主要使用的筛法有两个:埃氏筛和欧拉筛(线性筛)。 使用筛法的原因很简单:对于一个数,我们要找它的因数不容易;但是对于一个因数,我们找它的倍数很简单。 【埃氏筛】 因为一个数的倍数一定不是质数,且任何数都能分解为若干质数 阅读全文
摘要:
简单的树上 dp 其实已经在普及组涉及过:自上而下和自下而上传递的性质。 现在我们需要研究更复杂的树上 dp,比如换根 dp 等等。 【树上 dp】 最大子树和 给出一棵带点权的树,求这棵树中的最大权连通块。 因为是无根树,我们人为规定 1 号结点为根。 \(dp[i]\) 表示以 \(i\) 为根 阅读全文
摘要:
主要有:剪枝、双向搜索、启发式搜索、迭代加深。 【剪枝】 拼接正方形 一道水题。基本想法:枚举每根木棍属于哪条边,\(O(\frac{4^m}{4!})\)。 但是这太慢了,我们剪枝:如果一条边目前的累计长度 \(>\frac{sum}{4}\),就返回 false。 于是我们就通过了。 运动员最佳 阅读全文
摘要:
【单调栈】 柱状图最大矩形: 首先我们有一个最简单的方法:\(O(n^3)\) 枚举左右端点,然后再求中间的最小值,最后乘起来得到这段矩形组成的最大面积。 求最小值,我们考虑到ST表,我们可以用它优化到 \(O(n^2)\)。 接下来我们考虑转换枚举思路: 我们发现,一个矩形的大小,由它的左右端点, 阅读全文
摘要:
【前置知识】 运算律,单位元。 运算律基本就是交换律、结合律、分配律。 单位元: 假设我们现在有一个运算 \(\bigoplus\)。 如果 \(a\bigoplus b=b\bigoplus a=a\),称 \(b\) 是运算 \(\bigoplus\) 的单位元。 【线段树】 线段树是一个树形数 阅读全文
摘要:
【引入】 分(而)治(之)。 把一个问题分解成规模更小的子问题,从而降低复杂度的算法。 【归并排序】 我们用选择排序,复杂度是 \(O(\frac{n^2}{2})\)。 但是如果我们把数组分成两半,分别选择排序,再归并起来,复杂度就降低为 \(O(\frac{n^2}{4}+n)\),几乎快了一半 阅读全文
摘要:
【双指针】 双指针(two-pointer method) 这里的指针不是指向内存地址的指针,而是一个类似于光标的、指向一个位置的指针。 双指针是一个优化时间复杂度的思想。 【例子1】 两数之和 二重循环当然可以,但是太慢了。 于是我们可以使用双指针优化。 样例: 7 7 1 3 4 8 6 9 5 阅读全文