DotA 1vN 难题:巧用贪心策略最小化 HP 损耗!
解题思路 游戏为回合制,每回合可攻击一名敌方英雄,使其HP减1。 所有存活的敌方英雄每回合对我方造成总DPS点伤害。 目标:最小化我方承受的总伤害。 贪心策略 优先攻击DPS/HP比值高的敌人。 理由: - 敌方英雄存活越久,造成的总伤害越多。 - 应优先消灭单位时间内伤害输出效率高的敌人。 排序规则 按 `DPS/HP` 降序排序,若比值相同,则按DPS降序排序。 计算总伤害 设敌方英雄按排序后顺序为 `1, 2, ..., N`。 总伤害 = Σ(第i个英雄存活期间造成的伤害) 第i个英雄存活回合数 = 其HP值(因为每回合对其造成1点伤害)。 在击败前i-1个英雄期间,第i个英雄一直存活。 因此: 总伤害 = Σ( DPS[i] * (HP[1] + HP[2] + ... + HP[i]) ) 样例验证 输入: 2 100 1 1 100 排序: 英雄1: DPS=100, HP=1, 比值=100 英雄2: DPS=1, HP=100, 比值=0.01 按比值降序,顺序不变。 计算: 总伤害 = 100*1 + 1*(1+100) = 100 + 101 = 201 输出:201 ✅ 代码实现 ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; struct Hero { int dps; int hp; }; bool cmp(const Hero &a, const Hero &b) { // 按 DPS/HP 降序排序,比值相同按 DPS 降序 // 为避免浮点数比较,使用交叉相乘 return a.dps * b.hp > b.dps * a.hp; } int main() { int n; while (cin >> n) { vector<Hero> heroes(n); for (int i = 0; i < n; i++) { cin >> heroes[i].dps >> heroes[i].hp; } // 贪心排序 sort(heroes.begin(), heroes.end(), cmp); long long totalDamage = 0; long long totalHP = 0; for (int i = 0; i < n; i++) { totalHP += heroes[i].hp; // 当前英雄存活期间的总HP累计 totalDamage += heroes[i].dps * totalHP; } cout << totalDamage << endl; } return 0; } ``` ######[AI问答 | 609点数解答 | 2026-01-01 00:14:47]
- 游戏逻辑揭秘:从手牌差与HP对比看玩家操作选择(DeepSeek | 313点数解答 | 2025-05-28 16:03:47)227
- “伤逝”技能解析:锁定触发,精准补牌有门道! (讯飞星火 | 331点数解答 | 2025-07-01 12:15:43)184
- DotA 1vN 难题:巧用贪心策略最小化 HP 损耗!(DeepSeek | 609点数解答 | 2026-01-01 00:14:47)27
- 深度解析技能代码:“杀”触发的技能逻辑与效果 (讯飞星火 | 286点数解答 | 2025-07-06 23:35:52)200
- 深度解析:“破军”技能触发逻辑、额外规则与实战效果 (讯飞星火 | 288点数解答 | 2025-07-06 23:39:34)196
- C++实现小核桃攻击敌人护盾能量值计算(字节豆包 | 897点数解答 | 2026-03-06 19:31:58)8
- 强制伤害与风险暴露:卡牌游戏技能代码深度解析与设计指南(DeepSeek | 1812点数解答 | 2026-03-22 14:05:12)8
- Python代码:实现周内提醒、自定义设置与自动关机功能(字节豆包 | 931点数解答 | 2024-11-18 23:38:25)214
- Python实现多功能提醒程序:可设置事项、颜色、关机时间,还有考试模式!(阿里通义 | 1596点数解答 | 2024-11-18 23:40:09)177
- Python 实现贪心算法:巧解找零钱问题及需注意要点 (字节豆包 | 398点数解答 | 2025-01-04 18:06:11)118
- C++ 破解“国王游戏”弱化版:贪心排序算法巧求最少最大奖赏(DeepSeek | 550点数解答 | 2025-04-28 18:16:50)399
- 巧妙贪心排序:解决国王游戏中大臣奖赏最大化问题(DeepSeek | 1002点数解答 | 2025-05-10 20:58:15)194