zoukankan      html  css  js  c++  java
  • 算法提高 最大乘积

    题目

    问题描述

      对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢?

    输入格式

      第一行一个数表示数据组数
      每组输入数据共2行:
      第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,
      第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。

    输出格式

      每组数据输出1行,为最大的乘积。

    样例输入

    1
    5 5
    1 2 3 4 2

    样例输出

    48


    思路:

    有小伙伴用背包做,可是蓝桥刷多了就习惯暴力了嘛~


    代码

    import java.util.*;
    import java.math.*;
    import java.util.regex.*;
    
    
    public class Main {
    
        final static int INF = 0x3f3f3f3f;
        final static int NUM = 100;
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            int T=sc.nextInt();
            int n,m;
            int ans;
            while(T--!=0) {
                n=sc.nextInt();m=sc.nextInt();
                int[] a=new int[n];
                for(int i=0;i<n;i++)a[i]=sc.nextInt();
                Arrays.sort(a);
    
                if(m==1){System.out.println(a[a.length-1]);continue;}
    
                ans=1;
                for(int i=a.length-1,j=0;i>0&&j<a.length-1;) {
                    if(m<=0)break;
                    if(a[i]*a[i-1]>a[j]*a[j+1]) {
                        ans*=a[i];i--;
                        m--;
                    }
                    else {
                        if(m>=2) {
                            ans*=a[j]*a[j+1];j+=2;
                            m-=2;
                        }
                        else {
                            ans*=a[i];i++;
                            m--;
                        }
                    }
    
                }
    
                System.out.println(ans);
            }
    
        }
    }
    
    
  • 相关阅读:
    关于素数的具体问题
    Scala Apply
    Scala内部类
    Scala 类和对象
    Scala Tuple类型
    Scala数组
    sql server 游标
    表变量和临时表详解
    子查询详解
    EXEC 和 SP_EXECUTESQL的区别
  • 原文地址:https://www.cnblogs.com/wygdove/p/4542086.html
Copyright © 2011-2022 走看看