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. 千万级并发!如何设计一个多级缓存系统?
  2. Web Application:Exploded和Web Application:Archive
  3. 最全三大框架整合(使用映射)——数据库资源文件jdbc.properties
  4. python逆序数怎么求_怎么算逆序数?急~~~!!!
  5. Tensorflow CNN(两层卷积+全连接+softmax)
  6. asp.net截取字符串方法
  7. c语言随机数表,C语言随机数
  8. 小型自动化运维--expect脚本之传递函数
  9. 分析华为毕昇JDK8:类数据共享CDS有效果,幅度很小
  10. unbuntu安装docker
  11. 计算机游戏玩法,123木头人游戏规则与玩法
  12. axios get怎么还会显示跨域_axios 跨域问题的解决 (接口 Phal 框架)
  13. 独立开发变现周刊(第41期):一个开源项目一个人每月收入8万美金
  14. 【Git常用】之回滚
  15. 2017年 第8届 蓝桥杯 Java B组 省赛真题详解及总结
  16. SEO关键词排名优化教程
  17. 【深度学习前沿应用】图像分类Fine-Tuning
  18. 粉象生活宇漫:贴吧引流实战教程
  19. 华为ensp,wireshark3.0.0,virtualbox 5.2.22 安装包
  20. cognos java_Cognos第三方用户认证(CustomJavaProvider)

热门文章

  1. 前端追梦人Cytoscape.js教程
  2. 震惊!我竟然在1080Ti上加载了一个35亿参数的模型(ZeRO, Zero Redundancy Optimizer)
  3. FCC--Chunky Monkey(数组分组)和Slasher Flick(截断数组)
  4. Git入门介绍-1-简单介绍
  5. nginx代理图片和视频
  6. ipfs分布式存储能否拯救互联网杀熟
  7. linux抢占式调度
  8. 【Scratch二次开发】06-修改界面字体大小
  9. canvas画布js代码实现大风车的动画
  10. 【项目实战】C/C++轻松实现4399小游戏:围住神经猫