欢迎来到下蛋爷之家|

下蛋爷

园龄:4年2个月粉丝:8关注:23

ABC232 部分题目题解

  • A

不讲,代码

  • B

挨个判断每一位需要做多少次即可,O(|S|)

代码

  • C

题目已经给你判断相同图的方法了,注意到 n8 所以直接阶乘枚举编号即可,O(n2n!)

代码

  • D

典型的标数法。

f[i][j] 表示从 (1,1) 走到 (i,j) 中经过的最多的空方块个数。若无法走到则 f[i][j] 设为 1

初始化:处理出第一行和第一列,如果当前格为障碍,则其再往右或往下均为 1

状态转移:
如果 f[i1][j]f[i][j1] 均为 1 或者 (i,j) 本身就是障碍,则 f[i][j] 也应设为 1

否则,取 f[i1][j]f[i][j1] 中的那个不是 1 的转移,不妨设 f[i1][j]1,则 f[i][j]=f[i1][j]+1

时间复杂度:O(nm)

代码

  • E

假设一矩阵 Mk 表示車从 (x1,y1) 出发后移动 k 步后到每一个格子的方法种数。

易知:

M0=[0001000]

Mk 中的 (i,j) 上的数即为 Mk1 中第 i 行 与第 j 列上所有数的和(不算 (i,j))。

可以发现一个事实:对于任意 Mk,第 x1 行上的数(不算 (i,j)) 全部相同,第 y1 列上的数(不算 (i,j)) 全部相同,其余所有的数也全部相同。

那么可以设:

Mk=[ddbdddbdccacddbdddbd]

则可得出递推式子:

{a=(n1)b0+(m1)c0b=a0+(n2)b0+(m1)d0c=a0+(m2)c0+(n1)d0d=b0+c0+(n+m4)d0

复杂度 O(k),可以过,代码

优化

这个式子显然可以矩阵递推。

Ak=[a,b,c,d]

Ak=Ak1[0n1m101n20m110m2n1011n+m4]

那么就可以 O(logk) 了。

posted @   下蛋爷  阅读(139)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起