【AGC017 F】ZigZag

本文探讨了一个关于路径计数的问题:在一个特定的三角形结构中寻找从顶点到底边的合法路径组合数量。该问题涉及到状态转移和复杂的路径约束条件。文章提出了一种高效的动态规划方法,并详细介绍了如何通过状态压缩和转移来降低算法的时间复杂度。

Description

有一个n行的三角形,第i行有i个格子。第i行第j个格子用(i,j)表示。从(i,j)可以到达(i+1,j)和(i+1,j+1)。现在要确定m条从(1,1)出发到第n行的路径。设第a条路径走到的第b个格子是(b,X[a,b]),对于任意a < b,不能存在i,使得X[a,i]>X[b,i]。同时还有K条形如(a,b,c)的限制,表示第a条路径第b个点到第b+1个点必须往方向c走。
求合法的方案数模10^9+7
n,m≤20

Analysis

首先O(n*3^n)DP显然

  • 设出状态f[i][j][s]表示做了前i条路,第i条走到第j步,状态为s。这里的s前j位是由第i条路径确定,后面的位由第i-1条确定
  • 精髓在于,通过等价转换将dp值强行累计入等价的状态中(讨论向右走还是向左,向左就对状态做些手脚),以做到优化复杂度而不重不漏
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值