当前位置: 首页 > news >正文

【中等】龙与地下城游戏问题-Java:经典动态规划结合空间压缩解法

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑,人工智能时代就要来临了,科… 继续阅读 前言https://www.captainai.net/troubleshooter

package live.every.day.ProgrammingDesign.CodingInterviewGuide.RecursionAndDynamicPrograming; /** * 龙与地下城游戏问题 * * 【题目】 * 给定一个二维数组map,含义是一张地图,例如,如下矩阵: * -2 -3 3 * -5 -10 1 * 0 30 -5 * 游戏的规则如下: * 骑士从左上角出发,每次只能向右或向下走,最后到达右下角见到公主。 * 地图中每个位置的值代表骑士要遭遇的事情。如果是负数,说明此处有怪兽,要让骑士损失血量。如果是非负数,代表此处有血瓶,能 * 让骑士回血。 * 骑士从左上角到右下角的过程中,走到任何一个位置时,血量都不能少于1。 * 为了保证骑士能见到公主,初始血量至少是多少?根据map,返回初始血量。 * * 【难度】 * 中等 * * 【解答】 * 如果map大小为MxN,经典动态规划方法的时间复杂度为O(MxN),额外空间复杂度为O(MxN)。结合空间压缩之后可以将额外空间复杂 * 度降至O(min{M,N})。空间压缩的原理请参考“矩阵的最小路径和”问题,这里不再详述。 * * 请参看如下代码中的minHP2方法。 * * @author Created by LiveEveryDay */ public class DungeonsAndDragons2 { public static int minHP2(int[][] m) { if (m == null || m.length == 0 || m[0] == null || m[0].length == 0) { return 1; } int more = Math.max(m.length, m[0].length); int less = Math.min(m.length, m[0].length); boolean rowMore = more == m.length; int[] dp = new int[less]; int tmp = m[m.length - 1][m[0].length - 1]; dp[less - 1] = tmp > 0 ? 1 : -tmp + 1; int row = 0; int col = 0; for (int j = less - 2; j >= 0; j--) { row = rowMore ? more - 1 : j; col = rowMore ? j : more - 1; dp[j] = Math.max(dp[j + 1] - m[row][col], 1); } int chosen1 = 0; int chosen2 = 0; for (int i = more - 2; i >= 0; i--) { row = rowMore ? i : less - 1; col = rowMore ? less - 1 : i; dp[less - 1] = Math.max(dp[less - 1] - m[row][col], 1); for (int j = less - 2; j >= 0; j--) { row = rowMore ? i : j; col = rowMore ? j : i; chosen1 = Math.max(dp[j] - m[row][col], 1); chosen2 = Math.max(dp[j + 1] - m[row][col], 1); dp[j] = Math.min(chosen1, chosen2); } } return dp[0]; } public static void main(String[] args) { int[][] m = {{-2, -3, 3}, {-5, -10, 1}, {0, 30, -5}}; System.out.printf("The min HP is: %d", minHP2(m)); } } // ------ Output ------ /* The min HP is: 7 */
http://www.zskr.cn/news/1313192.html

相关文章:

  • 【Qt串口实战】硬件升级后readyRead信号丢失的排查与修复
  • 用两个栈实现队列-C++
  • Cyber​​ RT 开发人员工具
  • [实践|鸿蒙] 从HAP到APP:DevEco Studio编译构建全流程实战解析
  • 【LeetCode刷题日记】112.递归中的「减法思维」:一题带你打通二叉树路径求和的任督二脉
  • 【中等】数字字符串转换为字母组合的种数-Java:解法二
  • Google Earth Engine(GEE)——run with profiler查看我们所运行程序的描述、计算指标、内存、峰值内存和数量
  • 基于OpenCV与全志T527的嵌入式手势识别:从算法到工程实践
  • 国产多模态大模型:科学计算领域的“新质生产力”
  • 佛山广州佛山五大校区培训哪家好?全日制培训班推荐 - 检测回收中心
  • 【LLM】code agent bench
  • ChatGPT在软件开发中的实战应用:从代码生成到调试的AI助手指南
  • 用TP4056、PW5300和PW2051搞定你的STM32项目供电:从3.7V锂电池到3.3V/5V的完整电路设计
  • Stripe CLI安全最佳实践:如何保护你的API密钥和敏感数据
  • UVM验证中Sequence启动方式详解:从原理到实战避坑指南
  • 2025最权威的AI学术工具实测分析
  • Win11Debloat:终极Windows系统优化指南,三分钟提升电脑性能38%
  • 钦州金条回收银条回收铂金项链回收克拉钻石回收婚嫁首饰回收本地排名正规门店专业推荐哪家靠谱二手哪家强 - 检测回收中心
  • 如何快速上手ActionView:5分钟完成项目配置和问题创建
  • 3步搭建免费网盘直链解析服务:彻底告别下载限速烦恼
  • 2026届毕业生推荐的十大AI辅助写作方案横评
  • 从业15年网优老兵实话:5G网优工程师发展前景,看完不迷茫
  • 平凉黄金回收白银回收铂金回收钻石回收贵金属回收本地排名正规门店专业推荐哪家靠谱二手哪家强 - 检测回收中心
  • Whetstone.chatgpt:简化ChatGPT Function Calling开发的AI Agent框架
  • 模块化电力电子:标准化接口与软件定义如何重塑能源系统设计
  • NotebookLM权限继承链断裂?揭秘Google Cloud IAM Policy Analyzer在NotebookLM上下文中的3类隐性失效场景
  • 告别繁琐组态:用SVG + JavaScript 5分钟为你的工业设备创建可交互HMI组件
  • 上海髋关节置换医院怎么选?从核心维度拆解选型逻辑 - 奔跑123
  • 把 SAP Central Business Configuration 的 Implementation Workspace 搭起来,别把云实施做成另一个 SPRO
  • Loop:让Mac窗口管理变得优雅而高效