当前位置: 首页 > 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.jsqmd.com/news/841383/

相关文章:

  • 钉钉API双轨制升级:平台演进的两难抉择与技术哲学
  • OpenSwiftUI集成开发完全手册:AppKit与UIKit深度整合
  • 【中等】数字字符串转换为字母组合的种数-Java:解法一
  • Cyber​​ RT 开发人员工具
  • Go语言文件自动化管理工具Cellar:基于规则引擎的智能整理方案
  • 用两个栈实现队列-C++
  • 盘锦黄金回收白银回收铂金回收钻石回收贵金属回收本地排名正规门店专业推荐哪家靠谱二手哪家强 - 检测回收中心
  • 程序员的“中年危机”:我靠这6个方法成功转型
  • 小红勇闯地下城【牛客tracker 每日一题】
  • 【中等】数字字符串转换为字母组合的种数-Java:解法二
  • 基于OpenCV与全志T527的嵌入式手势识别:从算法到工程实践
  • 佛山广州佛山五大校区培训哪家好?全日制培训班推荐 - 检测回收中心
  • 零基础也能玩转Switch破解:TegraRcmGUI图形化注入工具完全指南
  • 国产多模态大模型:科学计算领域的“新质生产力”
  • 钦州黄金手镯回收纯银回收白金回收50分钻石回收二手钻石回收高价多少钱一克同城价格查询上门上门估价闲置变现转让靠谱权威排行榜 - 检测回收中心
  • 给 AI加长期记忆:再也不用每次重新交接项目了
  • 【LLM】code agent bench
  • 钦州黄金项链回收老银器回收旧铂金回收1克拉钻石回收二手铂金回收本地排名正规门店专业推荐哪家靠谱二手哪家强 - 检测回收中心
  • 用TP4056、PW5300和PW2051搞定你的STM32项目供电:从3.7V锂电池到3.3V/5V的完整电路设计
  • Stripe CLI安全最佳实践:如何保护你的API密钥和敏感数据
  • kube-lego深度探索:HTTP-01挑战实现原理与源码分析
  • Namshi/JOSE API参考手册:所有签名算法的详细说明
  • 平顶山黄金戒指回收白银首饰回收高价铂金回收品牌钻戒回收二手白银回收高价多少钱一克同城价格查询上门上门估价闲置变现转让靠谱权威排行榜 - 检测回收中心
  • 佛山广州高职高考封闭班培训哪家好?全日制培训班推荐 - 检测回收中心
  • Win11Debloat:终极Windows系统优化指南,三分钟提升电脑性能38%
  • VNC实战:解锁VMware虚拟机远程桌面访问的完整配置指南
  • 钦州金条回收银条回收铂金项链回收克拉钻石回收婚嫁首饰回收本地排名正规门店专业推荐哪家靠谱二手哪家强 - 检测回收中心
  • 如何快速上手ActionView:5分钟完成项目配置和问题创建
  • 3步掌握Demucs-GUI:新手快速入门音乐分离工具
  • 3步搭建免费网盘直链解析服务:彻底告别下载限速烦恼