zoukankan      html  css  js  c++  java
  • 1743最优合并问题(贪心)

    Description

    给定k 个排好序的序列s1 , s2,……, sk , 用2 路合并算法将这k 个序列合并成一个序列。假设所采用的2 路合并算法合并2 个长度分别为m和n的序列需要m + n -1次比较。试设计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。
    为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多。
    对于给定的k个待合并序列,计算最多比较次数和最少比较次数合并方案。
     

    Input

    输入数据的第一行有1 个正整数k(k≤1000),表示有k个待合并序列。接下来的1 行中,有k个正整数,表示k个待合并序列的长度。

    Output

    输出两个整数,中间用空格隔开,表示计算出的最多比较次数和最少比较次数。

    Sample

    Input 

    4
    5 12 11 2

    Output 

    78 52
     1 #include <iostream>
     2 #include <algorithm>
     3 #include <string.h>
     4 #include <vector>
     5 #include <queue>
     6 
     7 #define inf 0x3f3f3f3f
     8 
     9 using namespace std;
    10 
    11 priority_queue<int, vector<int>, greater<int> > q1;
    12 priority_queue<int, vector<int>, less<int> > q2;
    13 
    14 int main()
    15 {
    16     int n, x, i, sum, sum1, sum2;
    17     cin >> n;
    18     for(i=0; i<n; i++)
    19     {
    20         cin >> x;
    21         q1.push(x);
    22         q2.push(x);
    23     }
    24     sum1 = 0;
    25     while(q1.size()!=1)
    26     {
    27         sum = 0;
    28         for(i=0;i<2;i++)
    29         {
    30             sum += q1.top();
    31             q1.pop();
    32         }
    33         q1.push(sum);
    34         sum--;
    35         sum1 += sum;
    36     }
    37     sum2 = 0;
    38     while(q2.size()!=1)
    39     {
    40         sum = 0;
    41         for(i=0;i<2;i++)
    42         {
    43             sum += q2.top();
    44             q2.pop();
    45         }
    46         q2.push(sum);
    47         sum--;
    48         sum2 += sum;
    49     }
    50     cout << sum2 << " " << sum1 << endl;
    51     return 0;
    52 }
  • 相关阅读:
    Servlet的生命周期
    HTTP协议简单记录
    Tomcat和JavaWeb目录和流程
    02 html 表格表单
    01 初识HTML
    Python 利用pywin32批量将doc转换成docx再读取成一行存入excel
    power bi 数据红绿灯详细用法
    Linux和Windows启动后台程序
    MySQL导出数据字典
    适用于渗透测试不同阶段的工具收集整理
  • 原文地址:https://www.cnblogs.com/0xiaoyu/p/14096403.html
Copyright © 2011-2022 走看看