关于《海岛奇兵》中n点能量可造成最大伤害的计算

最近在玩海岛奇兵, 里面有
武器A, 第n次使用消耗(10 + 6 * (n - 1))点能量并造成18315伤害;
武器B, 第n次使用消耗 (3 + 2 * (n - 1))点能量并造成8124伤害,

就想着能不能写一个程序计算一下, 当有x点能量时, 可造成的最大伤害是多少? 分别使用AB武器各多少次?
讨论: https://leetcode.cn/circle/discuss/vZu06x/

总觉得除了暴力还有更好的算法, 但是不知道怎么做


def multiple_rocket_launcher(n: int):
    """
    计算多管火箭发射器造成的伤害值
    :param n: 发射的火箭数量
    :return: 返回伤害值
    """
    return 10 + 6 * (n - 1)


def artillery(n: int):
    """
    计算火炮造成的伤害值
    :param n: 发射的火炮数量
    :return: 返回伤害值
    """
    return 3 + 2 * (n - 1)


def multiple_rocket_launcher_total_energy(n: int):
    """
    计算发射 n 枚多管火箭发射器需要的总能量值
    :param n: 发射的火箭数量
    :return: 返回总能量值
    """
    return n * (10 + multiple_rocket_launcher(n)) // 2


def artillery_total_energy(n: int):
    """
    计算发射 n 枚火炮需要的总能量值
    :param n: 发射的火炮数量
    :return: 返回总能量值
    """
    return n * (3 + artillery(n)) // 2


def max_multiple_rocket_launcher_count(energy_value: int):
    """
    计算 energy_value 点能量值最多可以发射多少枚多管火箭发射器
    :param energy_value: 可消耗的能量值
    :return: 返回最多可以发射的多管火箭发射器数量
    """
    multiple_rocket_launcher_count = 0
    while multiple_rocket_launcher_total_energy(multiple_rocket_launcher_count + 1) <= energy_value:
        multiple_rocket_launcher_count += 1
    return multiple_rocket_launcher_count


def max_artillery_count(energy_value: int):
    """
    计算 energy_value 点能量值最多可以发射多少枚火炮
    :param energy_value: 可消耗的能量值
    :return: 返回最多可以发射的火炮数量
    """
    artillery_count = 0
    while artillery_total_energy(artillery_count + 1) <= energy_value:
        artillery_count += 1
    return artillery_count


def maximum_injury_value(energy_value: int):
    """
    计算 energy_value 点能量值可造成的最大伤害值
    :param energy_value: 可消耗的能量值
    :return: 返回最大伤害值
    """
    if energy_value <= 0:
        print("能量值必须大于0")
        return
    multiple_rocket_launcher_injury_value = 18315
    artillery_injury_value = 8124
    i = max_multiple_rocket_launcher_count(energy_value)
    use_list = []
    while i >= 0:
        surplus = energy_value - multiple_rocket_launcher_total_energy(i)
        j = max_artillery_count(surplus)
        total_damage = i * multiple_rocket_launcher_injury_value + j * artillery_injury_value
        # print(f"多管火箭发射器数量:{i}, 火炮数量:{j}, 伤害值", "{:,}".format(total_damage))
        use_list.append((i, j, total_damage))
        i -= 1

    # 根据伤害值排序
    use_list.sort(key=lambda x: x[2], reverse=True)
    return use_list[0]
   

或者递归, 效率很低但是代码很优雅简洁

int dfs(int i, int j, int energy) {
	int energy_a = 10+6*(i-1);
	int energy_b = 3+2*(j-1);

	int damage_a = 0;
	int damage_b = 0;

	//选择火箭递归
	if (energy_a <= energy)
		damage_a = dfs(i+1, j, energy - energy_a) + 18315;
	//选择火炮递归
	if (energy_b <= energy)
		damage_b = dfs(i, j+1, energy - energy_b) + 8124;

	return max(damage_a, damage_b);
}

int main() {
	int energy = 100;
	int res = dfs(1, 1, energy);
	return 0;
}

//作者:changelog
//链接:https://leetcode.cn/circle/discuss/vZu06x/view/vXS6oX/
//来源:力扣(LeetCode)
//著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

然后对常有能量值画了个图
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/489487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《仙剑7》登陆Xbox主机平台年末大作空窗期

首发一年后&#xff0c;《仙剑奇侠传7》终于登陆Xbox主机平台&#xff0c;而这也恰逢Xbox平台年末大作的窗口期。 随着年底大作的稀缺&#xff0c;以及海外3A RPG《星空》的延期&#xff0c;2022年底的这段时间给Xbox玩家体验《刀剑7》留下了一段空白。 可以说是因祸得福。 《仙…

微服务的可观测性

微服务是是一个大型的分布式系统&#xff0c;服务之间相互依赖支撑系统功能。同时对微服务系统的监控也是微服务体系的重要组成分。对微服务系统的监控主要分为三大部分&#xff0c;Trace追踪&#xff0c;Metrics指标&#xff0c;Log日志。 这三大部分几乎记录了微服务的前部信…

Stable Diffusion之核心基础知识和网络结构解析

Stable Diffusion核心基础知识和网络结构解析 一. Stable Diffusion核心基础知识1.1 Stable Diffusion模型工作流程1. 文生图(txt2img)2. 图生图3. 图像优化模块 1.2 Stable Diffusion模型核心基础原理1. 扩散模型的基本原理2. 前向扩散过程详解3. 反向扩散过程详解4. 引入Late…

【linux】进程地址空间(进程三)

目录 快速了解&#xff1a;引入最基本的理解&#xff1a;细节&#xff1a;如何理解地址空间&#xff1a;a.什么是划分区域&#xff1a;b.地址空间的理解&#xff1a; 为什么要有进程空间&#xff1f;进一步理解页表与写时拷贝&#xff1a; 快速了解&#xff1a; 先来看这样一段…

算法系列--两个数组的dp问题(1)

&#x1f495;"低头要有勇气&#xff0c;抬头要有底气。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–两个数组的dp问题(1) 大家好,今天为大家带来的是算法系列--两个数组的dp问题(1),两个数组的dp问题在动态规划问题中属于较难的部分…

c++之旅第八弹——多态

大家好啊&#xff0c;这里是c之旅第八弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一&#xff0…

AI研报:从Sora看多模态大模型发展

《从Sora看多模态大模型发展》的研报来自浙商证券&#xff0c;写于2024年2月。 这篇报告主要探讨了多模态大模型的发展趋势&#xff0c;特别是OpenAI发布的视频生成模型Sora&#xff0c;以及其对行业发展的影响。以下是报告的核心内容概述&#xff1a; Sora模型的发布&#x…

【C++航海王:追寻罗杰的编程之路】queue

目录 1 -> queue的介绍和使用 1.1 -> queue的介绍 1.2 -> queue的使用 1.3 -> queue的模拟实现 1 -> queue的介绍和使用 1.1 -> queue的介绍 queue的文档介绍 1. 队列是一种容器适配器&#xff0c;专门用于在FIFO(先进先出)上下文中操作&#xff0c;其…

C语言例4-4:putchar()函数的调用格式和使用的例子

代码如下&#xff1a; //putchar()函数的调用格式和使用的例子 #include<stdio.h> //编译预处理命令&#xff0c;即文件包含命令 int main(void) {char ch1N, ch2E, ch3W;putchar(ch1);putchar(ch2);putchar(ch3); //输出变量c1、c2和c3中的字符putchar(\n);putcha…

Protocol Buffers设计要点

概述 一种开源跨平台的序列化结构化数据的协议。可用于存储数据或在网络上进行数据通信。它提供了用于描述数据结构的接口描述语言&#xff08;IDL&#xff09;&#xff0c;也提供了根据 IDL 产生代码的程序工具。Protocol Buffers的设计目标是简单和性能&#xff0c;所以与 XM…

长安链共识算法切换:动态调整,灵活可变

#功能发布 长安链3.0正式版发布了多个重点功能&#xff0c;包括共识算法切换、支持java智能合约引擎、支持后量子密码、web3生态兼容等。我们接下来为大家详细介绍新功能的设计、应用与规划。 随着长安链应用愈加成熟与广泛&#xff0c;一些在生产中很实用的需求浮出水面。长安…

MySQL进阶-----索引的结构与分类

目录 前言 一、认识索引 二、索引结构 1.概述 2. 二叉树 3 .B-Tree 4.BTree 5.Hash 三、索引的分类 1 .索引分类 2 .聚集索引&二级索引 前言 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维…

基于nginx 动态 URL反向代理的实现

背景&#xff1a; 我们在项目中在这样一个场景&#xff0c;用户需要使用固定的软件资源&#xff0c;这些资源是以服务器或者以容器形式存在的。 资源以webAPI方式在内网向外提供接口&#xff0c;资源分类多种类型&#xff0c;每种类型的资源程序和Wapi参数都一样。这些资源部属…

javaWeb在线考试系统

一、简介 在线考试系统是现代教育中一项重要的辅助教学工具&#xff0c;它为学生提供了便捷的考试方式&#xff0c;同时也为教师提供了高效的考试管理方式。我设计了一个基于JavaWeb的在线考试系统&#xff0c;该系统包括三个角色&#xff1a;管理员、老师和学生。管理员拥有菜…

ubuntu2004自动更新内核导致nvidia驱动无法正常启动的问题

症状 开机后&#xff0c;nvidia-smi无法正常显示显卡状态&#xff0c;另外无法连接多个显示屏 解决 参考这个文章&#xff1a; ls /usr/src可以看到已安装的nvidia驱动版本是nvidia-535.54.03 然后运行下面的指令&#xff1a; sudo apt-get install dkmssudo dkms instal…

Mimikatz介绍

一、Mimikatz定义 mimikatz是benjamin使用C语言编写的一款非常强大的安全工具&#xff0c;它可以从机器内存中提取明文密码、密码Hash、PIN码和Kerberos票据等。它的功能非常强大&#xff0c;得到全球安全研究员的广泛使用。 Mimikatz 是一款功能强大的轻量级调试神器&#xff…

Java版直播商城免 费 搭 建:平台规划与常见营销模式,电商源码、小程序、三级分销及详解

【saas云平台】打造全行业全渠道全场景的saas产品&#xff0c;为经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多样的营销玩法覆盖所有经营场景…

在vue中使用echarts饼图示例

1.安装 npm install echarts --save 2.官方示例 option {title: {text: Referer of a Website,subtext: Fake Data,left: center},tooltip: {trigger: item},legend: {orient: vertical,left: left},series: [{name: Access From,type: pie,radius: 50%,data: [{ value: 104…

巧用cpl文件维权和免杀(下)

cpl文件的应用 bypass Windows AppLocker 什么是Windows AppLocker: AppLocker即“应用程序控制策略”&#xff0c;是Windows 7系统中新增加的一项安全功能。在win7以上的系统中默认都集成了该功能。 默认的Applocker规则集合,可以看到cpl并不在默认规则中: 开启Applocker规…

NVIDIA NIM 提供优化的推理微服务以大规模部署 AI 模型

NVIDIA NIM 提供优化的推理微服务以大规模部署 AI 模型 生成式人工智能的采用率显着上升。 在 2022 年 OpenAI ChatGPT 推出的推动下&#xff0c;这项新技术在几个月内就积累了超过 1 亿用户&#xff0c;并推动了几乎所有行业的开发活动激增。 到 2023 年&#xff0c;开发人员…