小美打怪(动态规划)

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

小美在玩游戏,游戏中有 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)可以理解为背包的“容量”,每次击败一个怪物后,小美的血量和攻击力都会变成被击败怪物的血量和攻击力,这意味着每次决策都会影响后续决策的可行性和收益。
  • 由于血量和攻击力的变化特性,它并不完全符合常见的背包问题模型,而更像是一个带有状态转移约束的决策过程问题。


目录
相关文章
|
消息中间件 Java 关系型数据库
10道不得不会的Docker面试题
10道不得不会的Docker面试题,10道不得不会的Docker面试题
9674 1
10道不得不会的Docker面试题
|
监控 供应链 定位技术
什么是 eCPM?它与 CPM 有何不同?
这篇文章解释了eCPM(每千人有效成本)的概念,它与CPM(每千人成本)的区别,如何计算eCPM,以及eCPM的主要优势和底价设置。文章还探讨了影响eCPM值的因素,以及如何确定合适的eCPM目标。
5529 2
什么是 eCPM?它与 CPM 有何不同?
|
6月前
|
传感器 人工智能 监控
通义灵码智能体模式在企业级开发中的应用:以云效DevOps自动化流程为例
通义灵码智能体模式具备语义理解、任务闭环与环境感知能力,结合云效DevOps实现CI/CD异常修复、测试覆盖与配置合规检查,大幅提升研发效率与质量。
273 0
|
8月前
|
人工智能 Java 程序员
《通义灵码2.0 AI 程序员体验官招募》 获奖名单公布
《通义灵码2.0 AI 程序员体验官招募》 获奖名单公布
305 1
|
自然语言处理 算法 编译器
编译原理复习一:正则表达式-NFA NFA-DFA DFA最小化(附题目与答案 超详细)
编译原理复习一:正则表达式-NFA NFA-DFA DFA最小化(附题目与答案 超详细)
1139 0
|
10月前
|
人工智能 数据可视化 机器人
【通义灵码】三句话生成P5.js粒子特效代码,人人都可以做交互式数字艺术
我发掘出的通义灵码AI程序员新玩法:三句话生成P5.js粒子特效代码,人人都可以做交互式数字艺术
367 6
|
9月前
|
人工智能 Java 程序员
通义灵码 2.0 | AI程序员 荣耀登场
通义灵码2.0引入了AI程序员,具备多文件代码修改和使用工具的能力,可帮助开发者完成需求实现、问题解决、单元测试用例生成等任务。相比1.0版本,2.0在代码生成速度、准确度及自然语言理解方面有显著提升,支持更多上下文类型如#file、#codeChanges等,便于灵活提问与代码审查。本文通过实际操作展示了AI程序员在功能开发、跨语言编程等方面的应用,体验良好;但在单元测试环节遇到环境检查问题未能解决,希望后续能提供更详细的修复文档。总体而言,AI程序员大幅提升了开发效率,尤其在新功能迭代和错误排查方面表现出色,但生成的代码风格有时需人工调整以适应现有项目结构。
|
人工智能 运维 JavaScript
通义灵码 SWE-GPT:从 静态代码建模 迈向 软件开发过程长链推理
在本文中,作者介绍了 Lingma SWE-GPT,一款专为解决复杂软件改进任务设计的开源大型语言模型系列。
599 30
|
监控 安全 算法
【面试问题】如果让你设计一个线程池如何设计?
【1月更文挑战第27天】【面试问题】如果让你设计一个线程池如何设计?
|
前端开发 JavaScript 网络架构
【Web 前端】箭头函数和普通函数有什么区别?
【4月更文挑战第22天】【Web 前端】箭头函数和普通函数有什么区别?