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

      算法提高 最大乘积  
    时间限制:1.0s   内存限制:512.0MB
        
    问题描述
      对于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
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int a[20];
    int cmp(int x,int y)
    {
        return x<y;
    }
    int main()
    {
        int t,n,m,i,j;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&n,&m);
            for(i=0;i<n;i++)
              scanf("%d",&a[i]);
    
         sort(a,a+n,cmp);
         int sum=1;
         for(i=n-1,j=0;i>=j&&m!=0;i--)
            {
               int  now1=a[i]*a[i-1];
                int now2=a[j]*a[j+1];
                if(now1<now2&&m>=2)
                {
                    sum*=now2;
                    i++;
                    j+=2;
                    m-=2;//选负数的时候一次选两个。
                }
                else
                {
                    sum*=a[i];
                    m--;//选正数的时候一次选一个。
                }
            }
            printf("%d
    ",sum);
        }
        return 0;
    }
     
  • 相关阅读:
    go入门4---数据
    hibernate之关联关系一对多
    hibernate的主键生成策略
    hibernate的入门
    struts--CRUD优化(图片上传)
    struts2--CRUD
    struts2--入
    Maven环境搭建
    EasyUI--增删改查
    easyui--权限管理
  • 原文地址:https://www.cnblogs.com/cancangood/p/4392303.html
Copyright © 2011-2022 走看看