一、题目描述
有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?
二、解题思路
从n个学生中选取k名学生,可以理解为在n个数据中,进行深度为k的递归,保持两组数据,一组表示当前的数据,一组表示最优的数据,每组数据含有最佳能力总值、选择的学生编号和这个编号对应的学生能力。
三、注意事项
1.递归开始需要首先判断深度是否超过k。
2.如果超过了,则进行最佳值判断、最佳值保存和距离为d的判断。
3.如果没有超过,则继续进行假设递归,记得保存数据。
4.缺陷:此算法时间复杂度较大,不建议使用。
四、代码实现
见我的github:合唱团(回溯法)