小美打怪(动态规划)

简介: 小美打怪(动态规划)

小美在玩游戏,游戏中有 n 个怪物,怪物的血量为 h,攻击力为 ai。小美的血量为 H,攻击力为 A,小美可以击败血量和攻击力都小于自己的怪物,并且打败后血量降为怪物的血量,攻击力降为怪物的攻击力。小美想知道最多可以打败多少怪物。

#include<bits/stdc++.h>
#include<vector>
using namespace std;
typedef pair<int,int> P;
bool cmp(P a, P b)
{
    return a.first<b.first||(a.first==b.first&&a.second>b.second);
}
int main()
{
    int n, H, A;
    cin >> n >> H >> A;
    vector<P>p(n);
    for(int i = 0; i < n; i ++)
        cin >> p[i].first;
for(int i = 0; i < n; i ++)
       cin >> p[i].second;
    sort(p.begin(), p.end(), cmp);
    vector<int>g;
    for(int i = 0; i < n; i ++)
    {
        int x=p[i].second,y=p[i].first;
        if(H <= y || A <= x) 
            continue;
        auto it=lower_bound(g.begin(),g.end(),x);
        if(it==g.end())
            g.push_back(x);
        else *it=x;
    }
    cout << g.size() << '\n';
}

这个题目类似于背包问题,给定一组物品,每个物品有两个属性(重量和价值),以及两个整数H和A。要求在不超过背包容量H的情况下,尽可能多地选取物品放入背包,并且物品的价值必须大于等于A。输出满足条件的物品数量。

  1. 定义一个自定义类型P,它是pair<int, int>的别名,用于存储物品的重量和价值。
  2. 定义比较函数cmp,用于对物品按照“价值相同时优先选取重量大的”的原则进行排序。这里的排序是降序排列,因为在题目描述中并没有明确指出价值小的优先,但是根据实际情况,如果价值相等,应该选择重量大的。
  3. 输入整数n(物品数量)、H(背包容量)和A(物品价值下限)。
  4. 创建一个大小为n的vector<P>容器p,存储每个物品的重量和价值。
  5. 依次读入每个物品的重量和价值,并存入容器p中。
  6. 对物品按照比较函数cmp定义的规则进行排序。
  7. 创建一个vector<int>容器g,用于存储满足条件的物品重量。
  8. 遍历排序后的物品列表p,对于每个物品,检查其重量是否超过背包容量H或其价值是否低于阈值A。如果满足这两个条件之一,则跳过当前物品。
  9. 如果物品符合条件,则在容器g中查找第一个大于等于当前物品重量x的位置。这里使用了lower_bound函数。
  10. 如果在g中找不到大于等于x的元素,则将x添加到g的末尾;如果找到了这样的元素,则替换该位置的元素为x。
  11. 遍历结束后,输出满足条件的物品数量,即g的大小。
  • 怪物的血量(h)和攻击力(ai)可以看作是背包问题中的“物品”,每个怪物对应一个物品,物品的“价值”是击败怪物的数量(1个单位)。
  • 小美的血量(H)和攻击力(A)可以理解为背包的“容量”,每次击败一个怪物后,小美的血量和攻击力都会变成被击败怪物的血量和攻击力,这意味着每次决策都会影响后续决策的可行性和收益。
  • 由于血量和攻击力的变化特性,它并不完全符合常见的背包问题模型,而更像是一个带有状态转移约束的决策过程问题。


目录
相关文章
|
索引 Python
全解析!9个处理Excel的Python库,到底哪个最好用?
全解析!9个处理Excel的Python库,到底哪个最好用?
6351 1
全解析!9个处理Excel的Python库,到底哪个最好用?
|
网络协议 Docker 容器
Docker容器内不能联网的6种解决方案
Docker容器内不能联网的6种解决方案   注:下面的方法是在容器内能ping通公网IP的解决方案,如果连公网IP都ping不通,那主机可能也上不了网(尝试ping 8.
12041 2
|
监控 供应链 定位技术
什么是 eCPM?它与 CPM 有何不同?
这篇文章解释了eCPM(每千人有效成本)的概念,它与CPM(每千人成本)的区别,如何计算eCPM,以及eCPM的主要优势和底价设置。文章还探讨了影响eCPM值的因素,以及如何确定合适的eCPM目标。
4771 2
什么是 eCPM?它与 CPM 有何不同?
|
机器学习/深度学习 自然语言处理 负载均衡
揭秘混合专家(MoE)模型的神秘面纱:算法、系统和应用三大视角全面解析,带你领略深度学习领域的前沿技术!
【8月更文挑战第19天】在深度学习领域,混合专家(Mixture of Experts, MoE)模型通过整合多个小型专家网络的输出以实现高性能。从算法视角,MoE利用门控网络分配输入至专家网络,并通过组合机制集成输出。系统视角下,MoE需考虑并行化、通信开销及负载均衡等优化策略。在应用层面,MoE已成功应用于Google的BERT模型、Facebook的推荐系统及Microsoft的语音识别系统等多个场景。这是一种强有力的工具,能够解决复杂问题并提升效率。
848 2
|
设计模式 JavaScript 前端开发
JS中发布/订阅模式的简单应用
JS中发布/订阅模式的简单应用
130 2
|
小程序 开发者
【微信小程序】-- 分包 - 独立分包 & 分包预下载(四十五)
【微信小程序】-- 分包 - 独立分包 & 分包预下载(四十五)
15255 0
|
机器学习/深度学习 人工智能 自然语言处理
详细介绍Seq2Seq、Attention、Transformer !!
详细介绍Seq2Seq、Attention、Transformer !!
330 0
|
JavaScript 前端开发 编译器
Vue 源码学习路线
【4月更文挑战第20天】探索Vue源码涉及响应式系统、虚拟DOM、模板编译等核心概念。先掌握Vue基础知识、JavaScript(ES6+)和前端工程化。从源码入口文件开始,研究响应式、虚拟DOM、模板编译、实例方法、全局API及生命周期。理解编译器和渲染器工作原理,实践编写Vue插件,参与开源项目,阅读相关文章教程,持续关注Vue最新动态。这是一个循序渐进、需要耐心和实践的过程。
184 1
|
存储 芯片
STM32速成笔记(十一)—EEPROM(AT24C02)
本文详细介绍了什么是AT24C02,介绍了它的引脚,读/写时序,给出了应用实例和详细的程序设计。最后,简单介绍了AT24C02的应用场景。
1896 0
STM32速成笔记(十一)—EEPROM(AT24C02)
|
消息中间件 并行计算 JavaScript
如何训练自己的ChatGPT
如何训练自己的ChatGPT
如何训练自己的ChatGPT