题目描述
有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?
输入描述:
每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值 ai(-50 <= ai <= 50)。接下来的一行包含两个整数,k 和 d (1 <= k <= 10, 1 <= d <= 50)。
输出描述:
输出一行表示最大的乘积。
示例1
输入
复制
3 7 4 7 2 50
输出
49
#include<iostream>
#include<vector>
#include<assert.h>
#include<algorithm>
using namespace std;
typedef vector<int> intArry;
template<typename T>
T max(T& lhs, T& rhs){
return lhs>rhs?lhs:rhs;
}
void findMax(intArry& ability,int start,int amount, int d, int k, long long& max,long long res);
int main(){
int n;
cin>>n;
assert(n>=1&&n<=50);
intArry ability;
int value;
for(int i =0; i<n; i++){
cin>&g