小E的怪物挑战刷题总结 | 豆包MarsCode AI刷题

84 阅读4分钟

问题描述

小E在一个游戏中遇到了 nn 个按顺序出现的怪物,每个怪物都有其特定的血量 hih**i 和攻击力 aia**i。小E的初始血量为 HH,攻击力为 AA。 游戏规则如下:

  1. 击败条件:小E可以击败一个血量和攻击力都小于她当前属性的怪物。
  2. 初始条件:对于第一个击败的怪物,需要满足其血量小于 HH 且攻击力小于 AA
  3. 属性继承:击败怪物后,小E会获得该怪物的属性值。
  4. 严格递增:为了保持战斗节奏,要求击败的怪物序列中,后一个怪物的血量和攻击力都必须严格大于前一个怪物。

小E想知道,她最多能击败多少怪物。

解题思路

  1. 理解问题:我们需要找到一个最长的怪物序列,使得小E可以依次击败这些怪物,并且每个怪物的血量和攻击力都严格大于前一个怪物。
  2. 初始条件:第一个击败的怪物需要满足其血量小于 HH 且攻击力小于 AA
  3. 动态规划:可以使用动态规划来解决这个问题。定义一个数组 dp,其中 dp[i] 表示以第 i 个怪物结尾的最长序列长度。
  4. 状态转移:对于每个怪物 i,检查所有之前的怪物 j,如果 h[i] > h[j]a[i] > a[j],则可以更新 dp[i]
  5. 最终结果:遍历 dp 数组,找到最大值即为所求。
def solution(n: int, H: int, A: int, h: list, a: list) -> int:
    # 初始化dp数组,dp[i]表示以第i个怪物结尾的最长序列长度
    dp = [0] * n
​
    # 遍历每个怪物
    for i in range(n):
        # 检查是否满足初始条件
        if h[i] < H and a[i] < A:
            dp[i] = 1
        else:
            continue
​
        # 检查之前的怪物,更新dp[i]
        for j in range(i):
            if h[i] > h[j] and a[i] > a[j]:
                dp[i] = max(dp[i], dp[j] + 1)
​
    # 返回dp数组中的最大值
    return max(dp)
​
​
if __name__ == '__main__':
    print(solution(3, 4, 5, [1, 2, 3], [3, 2, 1]) == 1)
    print(solution(5, 10, 10, [6, 9, 12, 4, 7], [8, 9, 10, 2, 5]) == 2)
    print(solution(4, 20, 25, [10, 15, 18, 22], [12, 18, 20, 26]) == 3)
​
​

体验与成长

使用AI刷题功能对我的编程学习产生了非常积极的影响。在开始接触编程时,我对算法和数据结构的理解还比较浅显,很多时候面对题目无从下手。通过使用AI刷题平台,我能够接触到大量的练习题,并且每道题目都有详细的解析,这让我能够更深入地理解问题的本质以及背后的逻辑。

  • 编程思维的提升:经过一段时间的练习,我发现自己的编程思维变得更加清晰了。最初,我可能只会用最直接的方法解决问题,但随着解题经验的增长,我学会了如何分析问题、设计高效算法,并且能够灵活运用各种数据结构来优化解决方案。
  • 知识掌握程度的提高:在刷题前后,我对很多概念的理解有了质的飞跃。比如,动态规划以前对我来说是难以捉摸的概念,但通过不断的实践和查看AI提供的解析,我现在已经能够熟练地应用它来解决一系列复杂问题。
  • 时间管理能力的增强:利用AI刷题工具,我可以根据自己的进度设定每日或每周的学习目标,这不仅帮助我更好地管理了时间,也提高了学习效率。

AI认知

对于AI技术在教育领域的应用,我认为这是一个非常有前景的方向。AI可以根据每个学生的学习情况提供个性化的教学内容,这对于提高学习效率有着显著作用。特别是AI刷题功能,它不仅仅是一个简单的题库,而是能够根据用户的做题记录智能推荐适合难度的题目,甚至指出用户在某些知识点上的薄弱环节,从而实现有针对性的学习。

使用AI刷题功能改变了我对传统学习方式的看法。过去,自学往往需要花费大量时间去寻找合适的资源,而现在,借助AI的帮助,我可以更快地找到自己感兴趣的领域并深入研究。更重要的是,这种基于数据分析的学习方法让我意识到持续反馈的重要性——不断地尝试、犯错、修正,这样的过程才是真正的学习之旅。