656.金币路径

给定一个数组 A(下标从 1 开始)包含 N 个整数:A1,A2,……,AN 和一个整数 B。你可以从数组 A 中的任何一个位置(下标为 i)跳到下标 i+1i+2,……,i+B 的任意一个可以跳到的位置上。如果你在下标为 i 的位置上,你需要支付 Ai 个金币。如果 Ai 是 -1,意味着下标为 i 的位置是不可以跳到的。

现在,你希望花费最少的金币从数组 A 的 1 位置跳到 N 位置,你需要输出花费最少的路径,依次输出所有经过的下标(从 1 到 N)。

如果有多种花费最少的方案,输出字典顺序最小的路径。

如果无法到达 N 位置,请返回一个空数组。

样例 1 :

输入: [1,2,4,-1,2], 2
输出: [1,3,5]

样例 2 :

输入: [1,2,4,-1,2], 1
输出: []

注释 :

  1. 路径 Pa1,Pa2,……,Pan 是字典序小于 Pb1,Pb2,……,Pbm 的,当且仅当第一个 Pai 和 Pbi 不同的 i 满足 Pai < Pbi,如果不存在这样的 i 那么满足 n < m
  2. A1 >= 0。 A2, ..., AN (如果存在) 的范围是 [-1, 100]。
  3. A 数组的长度范围 [1, 1000].
  4. B 的范围 [1, 100].

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/coin-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

做题结果

写出,但是不太好,动态规划+DFS

方法:动态规划+DFS

1. 动态规划算出最小步数是几,记录每个节点

2. dfs查找字典序最小的结果

class Solution {public List<Integer> cheapestJump(int[] coins, int maxJump) {int n = coins.length;int[] minSpend = new int[n];Arrays.fill(minSpend,Integer.MAX_VALUE);minSpend[0] = coins[0];for(int i = 0; i < n-1; i++){if(minSpend[i]==Integer.MAX_VALUE) continue;for(int j = 1; j <= maxJump&&i+j<n; j++){if(coins[i+j]==-1) continue;minSpend[i+j] = Math.min(minSpend[i]+coins[i+j],minSpend[i+j]);}}if(minSpend[n-1]==Integer.MAX_VALUE) return ans;;test(minSpend,coins,new ArrayList<>(),n-1,maxJump);return ans;}List<Integer> ans = new ArrayList<>();private void test(int[] dp, int[] coins, List<Integer> curr,int pos,int maxJump){if(pos == 0){curr.add(1);Collections.reverse(curr);if(cmp(curr)<0)ans = new ArrayList<>(curr);Collections.reverse(curr);curr.remove(curr.size()-1);return;}curr.add(pos+1);int v = dp[pos]-coins[pos];for(int j = 1; j <= maxJump&&pos-j>=0; j++){if(dp[pos-j]==v) {test(dp,coins,curr,pos-j,maxJump);}}curr.remove(curr.size()-1);}private int cmp(List<Integer> curr){if(ans.isEmpty()) return -1;int s1 = ans.size();int s2 = curr.size();for(int i = 0; i < Math.min(s1,s2); i++){if(curr.get(i).compareTo(ans.get(i))!=0){return curr.get(i).compareTo(ans.get(i));}}return s2-s1;}}

力扣 656.金币路径相关推荐

  1. LeetCode 656. 金币路径(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个数组 A(下标从 1 开始)包含 N 个整数:A1,A2,--,AN 和一个整数 B. 你可以从数组 A 中的任何一个位置(下标为 i)跳到下标 ...

  2. leetcode力扣64. 最小路径和

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [   [1,3,1],   [1,5, ...

  3. leetcode力扣62. 不同路径

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为" ...

  4. 力扣62-不同路径(C++,留个思路)

    思路: 动态规划类似于递归,就是发现大问题可以用小问题来做. 1.确定用动态规划 这个题怎么发现是动态规划的呢?首先想到0,1和1,0和1,1这三个位置,这三个位置最好看,前两个都是只走一步,1,1发 ...

  5. 2022-03-06:金币路径。 给定一个数组 A(下标从 1 开始)包含 N 个整数:A1,A2,……,AN 和一个整数 B。 你可以从数组 A 中的任何一个位置(下标为 i)跳到下标 i+1,i+

    2022-03-06:金币路径. 给定一个数组 A(下标从 1 开始)包含 N 个整数:A1,A2,--,AN 和一个整数 B. 你可以从数组 A 中的任何一个位置(下标为 i)跳到下标 i+1,i+ ...

  6. 力扣刷题记录-动态规划问题总结

    百度百科里对于动态规划问题是这样解释的: 在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果.因此各个阶段 ...

  7. 《LeetCode力扣练习》第64题 最小路径和 Java

    <LeetCode力扣练习>第64题 最小路径和 Java 一.资源 题目: 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为 ...

  8. 《LeetCode力扣练习》第62题 不同路径 Java

    <LeetCode力扣练习>第62题 不同路径 Java 一.资源 题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 "Start" ). ...

  9. python【力扣LeetCode算法题库】257- 二叉树的所有路径

    给定一个二叉树,返回所有从根节点到叶子节点的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 输入: 1 / 2 3 5 输出: ["1->2->5", &quo ...

最新文章

  1. C++中的explicit关键字介绍
  2. Elasticsearch 因拷贝多余的jar到lib库导致无法启动的问题
  3. 根据文字计算Label的尺寸
  4. 多维数组做参数,内存可以看做是线性的
  5. PAT 1032 (未完成)
  6. 移动通信3G技术概述
  7. Apache POI 读写 Word、PPT、Excel
  8. PHP include语句和require语句
  9. 浏览器兼容性问题和解决方案
  10. 将esx虚拟机从一台服务器迁移,虚拟化应用支招:ESX VtoP迁移实战
  11. 300兆的网速测试软件,300兆的网速是多少(300兆宽带测网速应该是多少)
  12. 程序猿必知必会[EP1]MD5算法
  13. js中blob转string、string转blob、typeArray转blob、blob转TypeArray
  14. 在Home Assistant 添加MariaDB数据库
  15. Au入门系列之一:开启音频处理之旅
  16. 实验四 MIPS寄存器文件设计 Logisim
  17. 基于nrf52832的vl53l1激光人体感应器设计
  18. 一.镜头知识及远心镜头介绍
  19. 集合运算(并集、交集、余集)
  20. StarUML使用指南

热门文章

  1. 徐荣谦《养好脾和肺 宝宝不积食不咳嗽长大个》【02】食物健脾
  2. 泄露libc库、shellcode、__libc_csu_init
  3. 多宫格视频是什么软件_抖音上的四/多宫格视频是怎么做出来的?多宫格视频一个接一个播放的制作技巧...
  4. 前端算法js:跳格子游戏
  5. Textpad的安装和配置
  6. R ggplot绘制双纵坐标轴
  7. 【已解决】office提示你的许可证不是正版,你可能是盗版软件的受害者?
  8. 李宏毅2021年机器学习笔记———卷积神经网络
  9. IDEA2020 安装教程,图文教程
  10. java多线程售票问题_使用java多线程实现火车站售票的问题