zoukankan      html  css  js  c++  java
  • 问题 1936: [蓝桥杯][算法提高VIP]最大乘积

    问题 1936: [蓝桥杯][算法提高VIP]最大乘积

    时间限制: 1Sec 内存限制: 128MB 提交: 77 解决: 16

    题目描述
    对于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
    提示
    来源
     
     
     
     
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <string>
     7 #include <deque>
     8 #include <vector>
     9 #include <set>
    10 using namespace std;
    11 #define ll long long
    12 const int N= 5e3+1000;
    13 #define P pair<int,int>
    14 ll n,k,a[N];
    15 int t;
    16 int main()
    17 {
    18 scanf("%d",&t);
    19 while(t--)
    20 {
    21 scanf("%lld%lld",&n,&k);
    22 for(ll i=0;i<n;i++) scanf("%lld",&a[i]);
    23 sort(a,a+n);
    24 ll ans=1;
    25 ll i,j;
    26 for(i=n-1,j=0;k>0;){
    27 if(k>=2){
    28 ll ans1 = a[i]*a[i-1];
    29 ll ans2 = a[j]*a[j+1];
    30 if(ans1>=ans2){
    31 ans*=a[i];
    32 k--;
    33 i--;
    34 }
    35 else{
    36 ans*=ans2;
    37 j+=2;
    38 k-=2;
    39 }
    40 }
    41 else{
    42 ans*=a[i];
    43 k--;
    44 }
    45 }
    46 printf("%lld
    ",ans);
    47 }
    48 return 0;
    49 }
  • 相关阅读:
    python获取DBLP数据集
    GNUPLOT 画多组柱状图 以及 折线图 以及各种问题的解决方案
    Leetcode 1:two sum
    测试面试之如何测试一个杯子
    C++小总结
    统计‘1’的个数
    C语言小总结
    剑指offer面试题1---赋值运算符函数
    黑盒测试与白盒测试
    软件测试的原则
  • 原文地址:https://www.cnblogs.com/tingtin/p/10574482.html
Copyright © 2011-2022 走看看