第一次

我觉得比给的题解清晰。

A

fx,y 表示选 x 个数,乘积模 mod 等于 y 的方案数,则有fa+b,i=j×kmodmod=ifa,j×fb,k,我们记为 fa+b=fafb

f2i=f2i1f2i1 都可以处理出来,设 m=i2i,则 fm=if2i

则答案为 xnm=i=0kifm,inm

B

t=0

换根 DP 板子,没啥好说的吧……

sx=isubtree(x)ai,fx=isubtree(x)aid(x,i),则 su=au+vson(u)sv,fu=vson(u)fv+sv

S=i=1nai,gx=i=1naid(x,i),则gu=fu+gfaufusu+Ssu=gfau+S2su

b=g

t=1

我们知道 gugfau=gfau+S2sugfau=S2su,即 2su=Sgu+gfau

我们还知道 b1=i=2nsi,则 2b1=i=2n2si=i=2nSgi+gfai=(n1)S+i=2ngfaigi

S=2b1i=2ngfaigin1,进而 su=Sgu+gfau2

au=suvson(x)sv

C

typ=0

枚举向左走的步数 i,则向右走的步数等于 i,向上走的步数和向下走的步数等于 n2i2

则向左走 i 步的方案数为 n!(i!)2(n2i2!)2,答案即为 i=0n2n!(i!)2(n2i2!)2

typ=1

把向右走看成入栈,把向左走看成出栈,答案即为长度为 n2 的出栈序列种类数,即 Cn2=(nn2)(nn21)

typ=2

这一档可以直接 DP 的……设 fi,j,k 表示走 i 步到 (j,k) 的方案数,然后把第一维滚掉就行。

另一种做法是设 fi 表示走 i 步回到原点的方案数,枚举第一次回原点时走过的步数 j,则 fi=j=2i[jmod2=0]Cj21×fij

j 步中不能走回原点,所以前 j 步有 Cj21 种方案,后 ij 步有 fij 种方案。

typ=3

枚举横向走的步数 i,则纵向走的步数为 ni,方案数为 i=0n[imod2=0](ni)Ci2Cni2

D

fi,j,k 表示填了 [1,i],有 j 段缺口,相邻 max 之和为 k 的方案数。

考虑把 i+1 填进去:

  • 填补一段缺口(eg:102132),有 j 种填法,转移到 fi+1,j1,k+2(i+1)
  • 填到缺口两侧(eg:1002130210021032),有 2j 种填法,转移到 fi+1,j,k+i+1
  • 填到缺口中间(eg:1000210302),有 j 种填法,转移到 fi+1,j+1,k
  • 填到两侧(不形成缺口)(eg:0012031212001230),有 2 种填法,转移到 fi+1,j,k+i+1
  • 填到两侧(形成缺口)(eg:00123012,12001203),有 2 种填法,转移到 fi+1,j+1,k
posted @   Jijidawang  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示