首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >天池 在线编程 回合制游戏(前缀和)

天池 在线编程 回合制游戏(前缀和)

作者头像
Michael阿明
发布2021-02-19 14:45:29
发布2021-02-19 14:45:29
3580
举报

1. 题目

QW 是一个回合制游戏的玩家,今天他决定去打怪。

QW 在一场战斗中会碰到 n 个怪物,每个怪物有攻击力 atk[i],每回合结束时如果第 i 个怪物还活着,就会对 QW 造成 atk[i] 的伤害。 QW 只能在每回合开始时击杀一个怪物,请帮 QW 出他打完所有怪物最少需要损失多少生命值。

代码语言:javascript
复制
n, atk[i] <= 100000
答案可能超过 int 范围

示例
样例 1:
输入:atk = [19,3]
输出:3

样例 2:
输入:atk = [1,3,2,5]
输出:10

2. 解题

  • 贪心,生命值大的优先打,然后 损失后缀和的生命值
代码语言:javascript
复制
class Solution {
public:
    /**
     * @param atk: the atk of monsters
     * @return: Output the minimal damage QW will suffer
     */
    long long getAns(vector<int> &atk) {
        // Write your code here
        sort(atk.rbegin(), atk.rend());
        int n = atk.size();
        vector<long long> tailsum(n+1, 0);
        for(int i = n-1; i >= 0; --i)
            tailsum[i] = tailsum[i+1]+atk[i];
        long long life = 0;
        for(int i = 1; i < n; ++i)
            life += tailsum[i];//后序活着的怪兽 攻击的生命值之和
        return life;
    }
};

151ms C++

代码语言:javascript
复制
class Solution {
public:
    /**
     * @param atk: the atk of monsters
     * @return: Output the minimal damage QW will suffer
     */
    long long getAns(vector<int> &atk) {
        // Write your code here
        sort(atk.rbegin(), atk.rend());
        int n = atk.size();
        long long life = 0;
        for(int i = 1; i < n; ++i)
            life += 1LL*i*atk[i];
        return life;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档