国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

藍橋杯算法提高 最大乘積

2019-11-08 19:57:20
字體:
來源:轉載
供稿:網友

原題:

 算法提高 最大乘積  時間限制:1.0s   內存限制:512.0MB    問題描述  對于n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?輸入格式  第一行一個數表示數據組數  每組輸入數據共2行:  第1行給出總共的數字的個數n和要取的數的個數m,1<=n<=m<=15,  第2行依次給出這n個數,其中每個數字的范圍滿足:a[i]的絕對值小于等于4。輸出格式  每組數據輸出1行,為最大的乘積。樣例輸入15 51 2 3 4 2樣例輸出
48 分析:

一開始想著先排序然后i,j分別記住開始和結束,然后兩個兩個相乘取大的乘積,錯了好幾次才反應過來,如果是負的兩個相乘比較大,就取這兩個,而如果是兩個正的相乘比較大,則只取最大的那一個正數,這樣保證如果m為奇數,最后取得那個數比較大。

代碼:

#include <algorithm>#include <iostream>using namespace std;int main(){    int t;    cin>>t;    while(t--)    {        int n,m;        cin>>n>>m;        int num[n],sum = 1;        for(int i = 0;i < n;i++)            cin>>num[i];        sort(num,num+n);        int i = 0,j = n - 1;        while(m >= 2)        {            if(num[i] * num[i + 1] >= num[j] * num[j - 1])            {                sum *= num[i] * num[i + 1];                i += 2;                m -= 2;            }            else            {                sum *= num[j];                j--;                m--;            }        }        if(m == 1)        {            sum *= num[j];        }        cout<<sum<<endl;    }    return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 皋兰县| 芦山县| 石城县| 皋兰县| 革吉县| 来宾市| 临洮县| 通榆县| 大关县| 莎车县| 航空| 阿图什市| 赞皇县| 响水县| 苏尼特右旗| 三门县| 佛学| 三亚市| 永善县| 通化市| 合江县| 华阴市| 榆树市| 惠水县| 陵水| 迭部县| 巴彦淖尔市| 醴陵市| 商南县| 丽江市| 江山市| 郑州市| 平乡县| 桂林市| 沈阳市| 新郑市| 霍邱县| 泰顺县| 青冈县| 郯城县| 深圳市|