题目描述

有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?

输入描述:

每个输入包含 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 }

优质内容筛选与推荐>>
1、【Android】PreferenceActivity 详解
2、[置顶] Android仿人人客户端(v5.7.1)——人人授权访问界面
3、linux基础学习7
4、qt 虚拟键盘中拼音输入法的添加
5、.net core 中的-----标记帮助程序


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn