跳转至

3916. 锯齿形数组的总数 III 🔒

题目描述

给你三个整数 nlr

长度为 n 的锯齿形数组定义如下:

  • 每个元素的取值范围为 [l, r]
  • 任意 两个 相邻的元素都不相等。
  • 任意 三个 连续的元素不能构成一个 严格递增 或 严格递减 的序列。

返回满足条件的锯齿形数组的总数。

由于答案可能很大,请将结果对 109 + 7 取余数。

 

示例 1:

输入:n = 3, l = 4, r = 5

输出:2

解释:

在取值范围 [4, 5] 内,长度为 n = 3 的锯齿形数组只有 2 种:

  • [4, 5, 4]
  • [5, 4, 5]

示例 2:

输入:n = 3, l = 1, r = 3

输出:10

解释:

在取值范围 [1, 3] 内,长度为 n = 3 的锯齿形数组共有 10 种:

  • [1, 2, 1], [1, 3, 1], [1, 3, 2]
  • [2, 1, 2], [2, 1, 3], [2, 3, 1], [2, 3, 2]
  • [3, 1, 2], [3, 1, 3], [3, 2, 3]

所有数组均符合锯齿形条件。

 

提示:

  • 3 <= n <= 200
  • 1 <= l < r <= 109

解法

方法一

思考

取值区间长度可达 \(10^9\),而 \(n\le 200\),不能按具体数值枚举。锯齿条件只约束相邻三项的升降关系,与绝对值无关,真正起作用的是相对大小。

\([l,r]\) 离散为长度 \(m=r-l+1\) 的全序后,状态可压成「前一项取值、当前升降方向」。\(m\) 仍可能很大,需要把对取值的转移写成前缀和或矩阵形式,才能在 \(O(n\cdot\mathrm{polylog}\,m)\) 或等价的值域 DP 中完成。

仓库中该题尚无实现代码,思考止于「值域过大、须对相对次序做 DP」这一观察。

1

1

1

1

评论