力扣3273.对Bob造成的最少伤害

力扣3273.对Bob造成的最少伤害

  • 贪心

    • 考虑每个敌人对答案的贡献
    • 对于敌人AB:先杀A所受伤害为tA * dA + (tA + tB) * dB
      • 先杀B所受伤害为tB * dB + (tA + tB) * dA
      • 因此如果tA * dB < tB * dA
      • 就先杀A
cpp 复制代码
  class Solution {
  public:
      long long minDamage(int power, vector<int>& damage, vector<int>& health) {
          int n = health.size();
          vector<pair<int,int>> a(n);
          for(int i=0;i<n;i++)
              a[i] = {(health[i] - 1) / power + 1,damage[i]};
              
          //按照公式排序
          ranges::sort(a,[](const auto &p,const auto &q){
              return p.first * q.second < q.first *p.second;
          });
  
          //s记录累积时间
          long long ans = 0,s = 0;
          //对于每个敌人的贡献 = 存活天数 * 伤害
          for(auto &[k,d] : a)
          {
              s += k;
              ans += s * d;
          }
          return ans;
      }
  };
相关推荐
苏小瀚16 小时前
算法---位运算
java·算法
Code小翊16 小时前
归并排序基础理解
数据结构·算法·排序算法
2401_8414956416 小时前
【数据结构】基于Floyd算法的最短路径求解
java·数据结构·c++·python·算法··floyd
珊珊而川16 小时前
SAUP 算法
算法
寂静山林16 小时前
UVa 1471 Defense Lines
算法
CHANG_THE_WORLD17 小时前
switch语句在汇编层面的几种优化方式 ,为什么能进行优化
汇编·算法·switch·汇编分析·switch case·switch case 汇编·switch case 语句
山,离天三尺三17 小时前
深度拷贝详解
开发语言·c++·算法
Blossom.11817 小时前
把AI“撒”进农田:基于极值量化与状态机的1KB边缘灌溉决策树
人工智能·python·深度学习·算法·目标检测·决策树·机器学习
一只鱼^_18 小时前
第 167 场双周赛 / 第 471 场周赛
数据结构·b树·算法·leetcode·深度优先·近邻算法·迭代加深
被制作时长两年半的个人练习生18 小时前
近期的笔试和面试的复盘
算法·面试·职场和发展·算子