2025/10/21 总结
博弈
情况
- 时间:\(30min\)
- 预期:\(100\)
- 实际:\(100\)
知识点
- 贪心
思路
我们考虑有多少个数为奇数即可,我们设所有数之和为 \(sum\),并且其中有 \(cnt\) 个奇数,所以最后的答案为 \(sum-\lfloor\frac{sum}{3}\rfloor-[cnt\bmod3=1\&cnt\neq1]\),所以就做完了。
购物
情况
- 时间:\(30min\)
- 预期:\(100\)
- 实际:\(100\)
知识点
- 模拟
思路
我们发现如果两个数 \(b_i,b_j(i\neq j)\) 如果两个都会用,设 \(b_i\) 用 \(x\) 个,\(b_j\) 用 \(y\) 个,所以有三种情况:
- \(b_i>b_j\),所以 \(xb_i+yb_j<(x+y)b_i\),故这种方法一定不为最大值;
- \(b_i<b_j\),所以 \(xb_i+yb_j<(x+y)b_j\),故这种方法一定不为最大值;
- \(b_i=b_j\),所以 \(xb_i+yb_j=(x+y)b_i\),故一定存在一种方法与这种方法的大小一样。
所以我们只可能选一种 \(b\)。所以我们枚举选哪一个 \(b\),再计算即可。要注意一下,可能只选择 \(a\) 这种情况。
划分
情况
- 时间:\(1h\)
- 预期:\(100\)
- 实际:\(100\)
知识点
- 单调栈,\(\text{dp}\)
思路
我们可以先 \(O(n^2)\) 的 \(\text{dp}\),得到 \(dp_i=dp_j+w(i+1,j)\)(这里 \(w(x,y)\) 是 \(x\sim y\) 中最小的 \(a\) 的 \(b\) 值),所以我们考虑优化 \(\text{dp}\)。我们可以把 \(dp_i\) 的式子转化一下,\(dp_i=\max_{k=1}^{top}(\max_{j=s_{k-1}+1}^{s_k}dp_j+b_{s_k})\),所以我们可以用单调栈来处理这个值就行了。
树上计数
情况
- 时间:\(1.5h\)
- 预期:\(100\)
- 实际:\(100\)
知识点
- 长链剖分,\(\text{dp}\)
思路
我们先可以很轻松的写一个 \(O(n^2)\) 的 \(\text{dp}\),设 \(dp_{0,x,i}\) 为以 \(x\) 为根的子树距离为 \(i\) 的有多少节点,\(dp_{1,x,i}\) 为距离 \(i\) 的节点中有多少个合法的两对,所以我们从上至下 \(\text{dp}\) 即可。我们再思考如何优化,我们观察一下就可以发现这其实是一道长链剖分板题,每次先计算重儿子,再计算轻儿子即可,最后答案为每一个点上的答案。

浙公网安备 33010602011771号