第七次 ABC

A

logai=logai,点权取对数转化成最大加和独立集,转移同时记一下真实乘积即可。

B

构造 n2 个序列,第 i 个序列的第 j 项为 (2i1)2j1

这些序列形如:

1,2,4,8,16,323,6,12,24,48,965,10,20,40,80,160

i 个序列的长度 li 为第 i 个序列中最后一个 n 的数的位置。

问题转化为,在这些序列中选出 m 个数,使得同一序列中相邻两项必有一选一不选。

对于 li 为偶数的序列,其中选出的数的个数一定为 limod2=0li2

而其中每个序列有两种选法,所以选出这 limod2=0li2 个数的方案有 2[limod2=0] 种。

对于 li 为奇数的序列,其中一定有 mli2 个序列选出 li2 个数,其余序列选出 li2 个数,

所以选出这些数的方案有 ([limod2=1]mli2) 种,总方案有 2[limod2=0]([limod2=1]mli2) 种。

需要统计 [limod2=0],[limod2=1],li2,枚举 li 容易做到 1log

Lucas 定理算组合数即可。

C

根号分治 DP,这么稀有。

算出 s1x 的序列个数,s1>y 的序列个数,相减得到答案。

问题变为给定 x,求把 n 分解为若干 x 的数的方案数。

可以想到两个 DP:

  • fi,j 表示只用 [x,i] 的数凑出 j 的方案数,发现就是一个完全背包。
  • gi,j 表示用 ix 的数凑出 j 的方案数,则有 gi,j=gi1,jx+gi,ji

gi1,jx 即为 i1 个数凑出 jx 的方案数,加一个 x 即可用 i 个数凑出 j

gi,ji 即为 i 个数凑出 ji 的方案数,整体加一即可用 i 个数凑出 j

发现都是 O(n2) 的,所以定一个阈值 B

规定 f 只能用 <B 的数转移,即 fi,ji<B

规定 g 只能用 B 的数转移,即 gi,j 的定义中 xBmax

注意到用 B 的数凑出 n 的方案一定用了 nB 个数,即 gi,jinB

枚举最终方案中 <B 的数的和 k,则方案总数为 k=0nfB1,ki=0nBgi,nk

总复杂度 O(nB+n2B),取 B=n 达到最优 O(nn)

posted @   Jijidawang  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示