ABC269 F~G
F:
我的做法比较繁琐,我维护的是白色点的权值和减去黑色点的权值和,还要求出整个矩阵的和。
可以参考一下,Code。
翻了翻题解,似乎大部分人的做法都是求出询问矩阵第一行和第二行白色点的权值和,然后直接等差数列就好了,这种做法较为简洁,可以看这个。
G:
首先很显然想到背包,每个物品的体积为 di=bi−ai,代价为 1,那么就是求出凑出每个体积的最小代价,初值为 fcur=0,其余均为 ∞,其中 cur=∑iai。
但是很显然,如果直接背包的复杂度是 O(nm)。
性质 1:∑|di|≤m。
证明:∑|di|=∑|bi−ai|≤∑ai+∑bi=m。
性质 2:|di| 的种类是 O(√m)。
证明:很显然,因为 1+2+⋯+√m=O(m)。
那么把体积相同的物品看成一种,这就是一个多重背包问题,只有 O(√m) 种物品。
可以用二进制优化或单调队列优化。
但是这里比较特殊,二进制优化比单调队列优化快,还好写。
官方题解里提到当 ∑ai≤n 时,∑ailogai 是 O(n√n) 级别的。
所以时间复杂度 O(m√m)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架