[go: up one dir, main page]

跳转至

3802. 给纸张涂色的方式数量 🔒

题目描述

给定一个整数 n 表示纸张的数量。

同时给定一个长度为 m 的整数数组 limit,其中 limit[i] 是使用颜色 i 能够涂色的最大纸张数。

你必须在下列条件下给 所有 n 张纸涂色:

  • 恰好使用两种不同 颜色。
  • 每种颜色必须覆盖 连续的一段 纸张。
  • 用颜色 i 涂的纸张数量不能超过 limit[i]

返回一个整数表示给所有纸张染色的 不同 方式数量。由于答案可能很大,返回答案对 109 + 7 取模的结果。

注意:如果 至少 有一张纸涂上了不同的颜色,就是不同的两种方式。

 

示例 1:

输入:n = 4, limit = [3,1,2]

输出:6

解释:

对于每个有序数对 (i, j),其中颜色 i 被用于给第一段涂色,颜色 j 被用于给第二段涂色(i != j),x 和 4 - x 的分割是有效的,当且仅当 1 <= x <= limit[i] 且 1 <= 4 - x <= limit[j]

合法的数对以及数量是:

  • (0, 1): x = 3
  • (0, 2): x = 2, 3
  • (1, 0): x = 1
  • (2, 0): x = 1, 2

因此,总共有 6 种有效的方式。

示例 2:

输入:n = 3, limit = [1,2]

输出:2

解释:

对于每个有序数对 (i, j),其中颜色 i 被用于给第一段涂色,颜色 j 被用于给第二段涂色(i != j),x3 - x 的分割是有效的,当且仅当 1 <= x <= limit[i] 且 1 <= 3 - x <= limit[j]

合法的数对和数量是:

  • (0, 1): x = 1
  • (1, 0): x = 2

因此,总共有 2 种合法的方式。

示例 3:

输入:n = 3, limit = [2,2]

输出:4

解释:

对于每个有序数对 (i, j),其中颜色 i 被用于给第一段涂色,颜色 j 被用于给第二段涂色(i != j),x3 - x 的分割是有效的,当且仅当 1 <= x <= limit[i] 且 1 <= 3 - x <= limit[j]

合法的数对和数量是:

  • (0, 1): x = 1, 2
  • (1, 0): x = 1, 2

因此,总共有 4 种合法的方式。

 

提示:

  • 2 <= n <= 109
  • 2 <= m == limit.length <= 105
  • 1 <= limit[i] <= 109

解法

方法一

1

1

1

1

评论