ABC 387(CF)

C

感觉还是不熟练与拆位相关的题目,补了半天才补出来。

问某个区间内符合某种性质的数的个数,很容易想到用前缀和思想转化,则问题转化为快速求出在[1,x]中高位比其余位上数字都大的数字的个数。

xnum位,最高位数字为d1

可以分为4种情况考虑,每种情况都只需要注意两点:

  1. 考虑的数字要<=x
  2. 任意2<=i<=numd1>di

具体见官方题解:editoral

code

F

缩点 + 拓扑dp

题目条件相当于给定 n(bi,bj)的偏序关系(1<=i,j<=n),且1<=bi<=m,求符合条件的b数组的方案数。

可以想到建图跑拓扑dp。对于建图后的环,环中的每个数一定都是相同的,因此可以缩成一个点。这样缩点后的图为DAG,可以直接在其上跑拓扑dp

设置状态:dp[i][j]:结点i上数字为j时的方案数

ans

uu0(j=1mdp[u][j])

init:无边的限制时,所有状态均合法,方案数均为1

trans

dp[v][j]=uu>v(i=1jdp[u][i])

其中可设置 dp 的前缀和数组 dps 来优化求和过程,具体细节见代码。

code

posted @   jxs123  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示
主题色彩