融合软泥怪 (优先队列)

1、题目:

【题目描述】 魔法少女小风一路斩(砍)妖(瓜)除(切)魔(菜),终于在一个洞穴内遇到了一 群强大的敌人——融合软泥怪!融合软泥怪是分裂软泥怪在 LV36 时持有大师球发动魔法卡 [融合]进化产生的,他们有着神奇的特性:一定范围之内,当两个融合软泥怪被杀死的时候, 这两个融合软泥怪的尸体将会融合,重新生成一个攻击力为死掉的两个软泥怪尸体之和的新 软泥怪,也就是说,只有当这个软泥怪群只剩下一只融合软泥怪的时候,才会完全消灭,然 而,这最后一只融合软泥怪的攻击力也会灰常灰常高的。 由于经济比较紧张(说白了就是穷),小风买不起魔法药水,所以为了节约魔法值, 只能用斧头跟软泥怪对砍(夭寿啦~!法师拿血吼砍人啦~!),最后再用大招[奇迹的现世]秒 掉最后的那一只融合软泥怪。他每砍死一只软泥怪,就会失去与软泥怪攻击力相等的血量。 由于小风强!无敌!所以他的血量非常非常高,肯定能打死这群软泥怪,但是由于经济十分 紧张,他连治疗药膏都买不起,所以他想问一下睿智的你,打死这群融合软泥怪最少需要消 耗多少的生命值。
PS:总觉得好像走错了好多片场的样子。。。。。。
【输入格式】 第一行给出融合软泥怪的数量 N,保证 N 不超过 20000。
第二行 N 个整数,表示每个融合软泥怪的攻击力,保证每只软泥怪的攻击力不超过 50000
【输出格式】 输出一个整数 K,表示魔法少女小风杀完这群融合软泥怪最少需要消耗的生命值,保证 K 在 INT 范围内。
【样例输入】
3
8 5 8
【样例输出】
34
【样例解释】
战报:
小风杀死了攻击力为 5 的软泥怪,生命值-5
小风杀死了攻击力为 8 的软泥怪,生命值-8
软泥怪发动了特殊能力,一只攻击力为 13 的软泥怪被召唤
小风杀死了攻击力为 8 的软泥怪,生命值-8
小风杀死了攻击力为 13 的软泥怪,生命值-13
软泥怪发动了特殊能力,一只攻击力为 21 的软泥怪被召唤
小风发动了终结技[奇迹的现世],攻击力为 21 的软泥怪被消灭,魔力值-707063423
小风获得了战斗的胜利,失去了生命值 34 点,获得了节操值 3 点

做这道题之前先了解一下优先队列的用法戳这里了解

2、代码及解题思路

这道题的思路无非就是将输入的数从大到小入队,这时队列top出来的就是最小值,将最后的两个值融合之后再push进队列,重复之前的动作,直到只剩最后一个时,发动终结技,结束。

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;

//保证在队列里top出的那个是最小值 
struct cmp
{
    bool operator()(int x,int y)
    {
        return x>y;
    }
};

int main()
{
    int n;
    scanf("%d",&n);
    priority_queue<int,vector<int>,cmp>q;

    int i;
    for(i=0; i<n; i++)
    {
        int num;
        scanf("%d",&num);
        q.push(num);
    }
    int result=0;
    while(q.size()>1)//当只剩一个的时候,发动终结技[奇迹的现世],不再进入循环 
    {
        int a,b,sum=0;
        a=q.top();
        q.pop();
        b=q.top();
        q.pop();
        sum=a+b;
        q.push(sum);//重新融合的再次进入队列 
        result+=sum;
    }
    printf("%d\n",result);
    return 0;
}

转载于:https://www.cnblogs.com/laixiaolian/p/6087069.html

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值