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值强行累计入等价的状态中(讨论向右走还是向左,向左就对状态做些手脚),以做到优化复杂度而不重不漏