• 算法提高 最大乘积


    题目

    问题描述

      对于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);
            }
    
        }
    }
    
    
  • 相关阅读:
    html websocket
    使用公钥进行远程登录主机/远程执行命令
    cropper.js 跨域问题
    利用PhantomJS生成网站截图
    Windows下的MySQL删除data文件夹后……
    快速设置环境变量
    压缩JS时生成source_map
    调试android chrome web page简明备忘
    CURL 简介【转载】
    一些同形异码字符
  • 原文地址:https://www.cnblogs.com/wygdove/p/4542086.html
Copyright © 2020-2023  润新知