合唱团
每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值 a
i
(-50 <= ai <= 50)。接下来的一行包含两个整数,k 和 d (1 <= k <= 10, 1 <= d <= 50)。
1 import java.io.BufferedReader; 2 import java.io.InputStreamReader; 3 4 public class Main{ 5 public static void main(String[] args) throws Exception { 6 BufferedReader read=new BufferedReader(new InputStreamReader(System.in)); 7 int n=Integer.parseInt(read.readLine()); 8 int [] nums=new int[n]; 9 String []xz=read.readLine().split(" "); 10 for(int i=0;i<n ; i++){ 11 nums[i]=Integer.parseInt(xz[i]); 12 } 13 String []dsl=read.readLine().split(" "); 14 int k = Integer.parseInt(dsl[0]); 15 int d=Integer.parseInt(dsl[1]); 16 long [][]min=new long[k][n]; 17 long [][]max=new long[k][n]; 18 long fs=0; 19 for(int i =0; i<k;i++){ 20 for(int j=0;j<n;j++){ 21 if(i==0){ 22 min[0][j]=nums[j]; 23 max[0][j]=nums[j]; 24 }else{ 25 min[i][j]=1; 26 max[i][j]=1; 27 } 28 for(int m=1;m<=d;m++){ 29 if(j>=m){ 30 if(i>0){ 31 if(nums[j]>0){ 32 min[i][j]=Math.min(min[i][j],min[i-1][j-m]*nums[j]); 33 max[i][j]=Math.max(max[i][j], max[i-1][j-m]*nums[j]); 34 }else{ 35 min[i][j]=Math.min(min[i][j],max[i-1][j-m]*nums[j]); 36 max[i][j]=Math.max(max[i][j], min[i-1][j-m]*nums[j]); 37 } 38 } 39 } 40 if(i==k-1&&j>=k-1){ 41 fs=Math.max(fs, max[i][j]); 42 } 43 44 } 45 } 46 } 47 System.out.println(fs); 48 } 49 }优质内容筛选与推荐>>