国产探花免费观看_亚洲丰满少妇自慰呻吟_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;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 麟游县| 平谷区| 禹州市| 大田县| 安乡县| 龙陵县| 连云港市| 成安县| 六盘水市| 余姚市| 北安市| 新丰县| 丁青县| 龙里县| 永安市| 五大连池市| 荃湾区| 盖州市| 日喀则市| 德格县| 延安市| 新密市| 平湖市| 太白县| 怀仁县| 韩城市| 观塘区| 花莲县| 龙井市| 瓦房店市| 仁寿县| 白城市| 玉林市| 常德市| 邻水| 木兰县| 南溪县| 施秉县| 金秀| 崇礼县| 松原市|