您的位置:首页 > 职场人生

n个学生站成一排 网易面试题之每个学生有一个能力值 牛牛想从n个学生中选出k名学生 要求相邻学生编号不超过d使得这k个学生乘积最大

2016-12-07 11:57 543 查看
package wangyi;
/**
* 需求分析
* n个学生站成一排 每个学生有一个能力值 牛牛想从n个学生中选出k名学生 要求相邻学生编号不超过d使得这k个学生乘积最大
*/

import java.util.*;
public class Demo{
public static void main(String[] args){
//键盘输入
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] nums = new int
;
for(int i = 0; i < n; i++){
nums[i] = scan.nextInt();//能力值
}
int k = scan.nextInt();//距离
int d = scan.nextInt();//范围
long[][] max = new long[k]
;
long[][] min = new long[k]
;
for(int i = 0; i < k; i++)
for(int j = 0; j < n; j++){
max[i][j] = 1;
if(i == 0){
min[i][j] = nums[j];
max[i][j] = nums[j];
}
}

for(int i = 1; i < k; i++)
for(int j = 0; j < n; j++)
for(int m = 1; m <= d; m++){
if(j - m >= 0){
if(nums[j] > 0){
min[i][j] = Math.min(min[i][j], min[i - 1][j - m] * nums[j]);
max[i][j] = Math.max(max[i][j], max[i - 1][j - m] * nums[j]);
} else{
min[i][j] = Math.min(min[i][j], max[i - 1][j - m] * nums[j]);
max[i][j] = Math.max(max[i][j], min[i - 1][j - m] * nums[j]);
}
}
}
long Max = 0;
for(int i = 0; i < n; i++)
Max = Math.max(Max, max[k - 1][i]);
System.out.println(Max);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐