• P2-2017级算法第二次上机 B 女娲加农炮


    题目描述

    (请不要带着科学的视角去看待题干故事,因为这本来就是以游戏为背景的)

    女娲加农炮是中国阵营的专属T3战车单位。这种装备了250mm口径核裂变重磅炮的钢铁巨兽是一种极为恐怖的屠戮机器,常常被安置在中国大批机械化部队的最前端,形成一堵坚不可摧、势不可挡的钢铁长城。

    表面上女娲加农炮是由东北重工集团研制而成,但事实上,东北重工只进行了方案论证和实车建造,女娲加农炮真正的缔造者,是来自中国的天才科学家芸如。

    现在芸如想化核裂变为核聚变,从而让女娲加农炮的火力再上一层楼。已知有N种不同的原子核(这里请忽略自然界原子核的种类上限),第i种原子核的重量为a[i]

    将两种原子核聚合在一起,消耗的能量等于两种原子核的重量之和。在经过n-1次聚合之后,聚合完成。芸如想使整个聚合过程消耗的能量最小,请求出这个最小的能量值。

    输入

    多组数据输入,第一个数为原子核的种类N。(N<=1e6

    接下来N个整数,代表N种原子核的重量。(在int范围内并用空格隔开)

    输出

    对于每组数据,输出一行,为聚合过程能量消耗的最小值。(保证结果在int范围内)

    输入样例

    4

    1 2 3 4

    输出样例

    19

    思路

    利用优先队列,每次将最小的两个从优先队列中取出并加和,然后将加和之后的元素重新放回优先队列并维护即可。最后输出累加值即为所求。

    参考代码

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<algorithm>  
     4 #include<queue>  
     5 using namespace std;  
     6 priority_queue<int,vector<int>,greater<int> >q;  
     7 int main()  
     8 {  
     9     int N;  
    10     while(scanf("%d",&N) == 1){  
    11         //优先队列  
    12         while(!q.empty())  
    13             q.pop();  
    14         int res = 0,weight;  
    15         for(int i = 0;i < N;i++){  
    16              scanf("%d",&weight);  
    17              q.push(weight);  
    18         }  
    19         for(int i = 1;i < N;i++){  
    20             int first = q.top();  
    21             q.pop();  
    22             int second = q.top();  
    23             q.pop();  
    24             q.push(first+second);  
    25             res += first + second;  
    26         }  
    27         printf("%d
    ",res);  
    28     }  
    29 }  
  • 相关阅读:
    [转][C#]文件流读取
    03-算数运算符
    02-bytes和str
    01-爬虫必备基础知识
    如何使用油猴脚本不要vip就能观看各大视频网站如腾讯,爱奇艺等的vip视频
    django下的framework
    centos6.7升级python3.6.1
    python 连接sqlserver: pymssql
    pycharm中提交Git 忽略部分代码
    jmeter 性能插件
  • 原文地址:https://www.cnblogs.com/zjsyzmx0527/p/10182806.html
Copyright © 2020-2023  润新知