摘要:
思路:发现不是一直修改的,所以可以猜到要离线处理。有这个思路,当我们正在维护 \(1\sim i\) 区间时,如果这个正在加入的点 \(i\) 之前有了,那么把之前加的 \(1\) 给去掉,现在的加上 \(1\),然后这个东西我们用树状数组维护,排序 \(r\) 就行了。 \(\mathscr{Co 阅读全文
摘要:
给 \(n\) 个 \(0\) 和 \(n\) 个 \(1\),排列成长度为 \(2n\) 的序列,满足在任意位置 \(0\) 的个数都小于 \(1\) 的个数。 \(Cat_n=\frac{C_{2n}^n}{n+1}\) 证明:不证。 与 Catalan 数有关的问题: \(n\) 个左括号和 阅读全文
摘要:
首先考虑暴力 dp,设 \(f_{i,j}\) 表示现在的时间是 \(i\),然后另一面(现在不在煎的面)已经煎了 \(j\) 分钟,那么先考虑不翻 \(f_{i,j}=\min f_{i-1,j}\),再考虑翻 \(f_{i,j}=\min f_{i-1,i-j}+1\) (默认都取最小) 明显会 阅读全文
摘要:
设 \(f_i\) 表示对于前 \(i\) 个数,\(i\) 选了, \(g_i\) 表示对于前 \(i\) 个数,\(i\) 没选,\(sum_i=\sum_{j=1}^{i}e_j\) 我们可以列出状态转移方程。 \[\begin{aligned}g_i&=\max\{g_{i-1},f_{i- 阅读全文
摘要:
前言:\(v\) 表示子节点,\(w\) 表示边的值,\(fa\) 表示父节点。因为本人一开始不会,所以看了这个题解所以自己写可能会有点像。(stO奇米dalao) 题解 定义 \(f_u\) 表示从点 \(u\) 出发,再回来,完成 \(u\) 这颗子树的最少时间。那么 \(f_u=\sum f_ 阅读全文
摘要:
设 \(f_i\) 表示对于前 \(i\) 个顾客开票所需的最短时间,\(f_i=\max\{f_{i-1}+a_i,f_{i-2}+b_i\}\) 左边表示单选,右边表示一块选。 // #define FILE_INPUT #include <iostream> #include <cstdio> 阅读全文
摘要:
\(f_{t,x}\) 表示,现在时间为 \(t\),位于的位置为 \(x\) 最多可以接到的馅饼个数,可得状态转移方程: \[\begin{aligned}f_{t,x}=\left\{\begin{array}{rcl} \max\{f_{t-1,x},f_{t-1,x-1},f_{t-1,x+ 阅读全文
摘要:
直接完全背包即可。 // #define FILE_INPUT #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define rep(i, a, b 阅读全文
摘要:
题目简化后就是 LIS 将原本的价值改成了 \(a_i\),我们设 \(f_i\) 表示对于前 \(i\) 个数,必定选 \(i\),那么 \(f_i=\max\limits_{a_i>a_k}\{f_k+a_i\}\) // #define FILE_INPUT #include <iostrea 阅读全文
摘要:
这道题直接状压就行,\(f_{S}\) 表示当前状态是 \(S\) 最少扣分数。 // #define FILE_INPUT #include <iostream> #include <string> #include <vector> #include <cstdio> #include <cst 阅读全文