1420:生成数组(2175 分)
目录
题目
给定三个整数 n、m 和 k 。考虑使用下图描述的算法找出正整数数组中最大的元素。

请你构建一个具有以下属性的数组 arr :
arr中包含确切的n个整数。1 <= arr[i] <= m其中(0 <= i < n)。- 将上面提到的算法应用于
arr之后,search_cost的值等于k。
返回在满足上述条件的情况下构建数组 arr 的 方法数量 ,由于答案可能会很大,所以 必须 对 10^9 + 7 取余。
示例 1:
输入:n = 2, m = 3, k = 1 输出:6 解释:可能的数组分别为 [1, 1], [2, 1], [2, 2], [3, 1], [3, 2] [3, 3]
示例 2:
输入:n = 5, m = 2, k = 3 输出:0 解释:没有数组可以满足上述条件
示例 3:
输入:n = 9, m = 1, k = 1 输出:1 解释:唯一可能的数组是 [1, 1, 1, 1, 1, 1, 1, 1, 1]
提示:
1 <= n <= 501 <= m <= 1000 <= k <= n
分析
- 遍历时更新更大的数时才会增加 k
- 因此考虑最后一个数取 m
- 假如 k 增加了,转为求 (n-1,m-1,k-1) 的递归子问题
- 假如 k 未增加,转为求 n-1 个数,最大值为 m(注意必须取到),成本 k 的子问题
- 为了递归,令 f(n,m,k) 代表所求的数量,g(n,m,k) 代表上述第二种情况的数量,则有
- f(n,m,k)=g(n,m,k)+f(n,m-1,k)
- g(n,m,k)=f(n-1,m-1,k-1)+g(n-1,m,k)*m
解答
|
|
0 ms