LeetCode 1575. 统计所有可行路径

【动态规划】【图论】【C++算法】1575统计所有可行路径 给你一个 互不相同 的整数数组,其中 locations[i] 表示第 i 个城市的位置。同时给你 start,finish 和 fuel 分别表示出发城市、目的地城市和你初始拥有的汽油总量每一步中,如果你在城市 i ,你可以选择任意一个城市 j ,满足 j != i 且 0 阅读详情

题目链接:LeetCode 1575. 统计所有可行路径

 题意:
   

给你一个 互不相同 的整数数组,其中 locations[i] 表示第 i 个城市的位置。同时给你 start,finish 和 fuel 分别表示出发城市、目的地城市和你初始拥有的汽油总量

每一步中,如果你在城市 i ,你可以选择任意一个城市 j ,满足  j != i 且 0 <= j < locations.length ,并移动到城市 j 。从城市 i 移动到 j 消耗的汽油量为 |locations[i] - locations[j]|,|x| 表示 x 的绝对值。

请注意, fuel 任何时刻都 不能 为负,且你 可以 经过任意城市超过一次(包括 start 和 finish )。

请你返回从 start 到 finish 所有可能路径的数目。

由于答案可能很大, 请将它对 10^9 + 7 取余后返回。

示例 1:

输入:locations = [2,3,6,8,4], start = 1, finish = 3, fuel = 5
输出:4
解释:以下为所有可能路径,每一条都用了 5 单位的汽油:
1 -> 3
1 -> 2 -> 3
1 -> 4 -> 3
1 -> 4 -> 2 -> 3

解题思路:

   动态规划,定义二维数组dp[i][f] 表示 在城市  i 剩余  燃料为  f 时的方案数

class Solution {

    /**
     * @param Integer[] $locations
     * @param Integer $start
     * @param Integer $finish
     * @param Integer $fuel
     * @return Integer
     */
    function countRoutes($locations, $start, $finish, $fuel) {
        $dp = array();
        $n = count($locations);
        for($i = 0; $i < $n; $i++) {
            for($j = 0; $j <= $fuel; $j++) {
                $dp[$i][$j] = 0;
            }
        }
        $dp[$start][$fuel] = 1;
        for($f = $fuel; $f >= 0; $f--) {
            for($i = 0; $i < $n; $i++) {
                for($j = 0; $j < $n; $j++) {
                    if($i == $j) {
                        continue;  // 原地不动,所以不计算
                    }
                    $dist = abs($locations[$i] - $locations[$j]);
                    if($f - $dist < 0) {
                        continue; // 燃油不能支持到达下个地方
                    }
                    $dp[$j][$f-$dist] = ($dp[$j][$f-$dist] + $dp[$i][$f]) % (1e9+7); // 从当前位置到i位置的方案数
                }
            }
        }
        $ans = 0;
        for($f = 0; $f <= $fuel; $f++) {
            $ans = ($ans + $dp[$finish][$f]) % (1e9+7);
        }
        return $ans;
    }
}
[EdgeAI] NXP eIQ 机器学习Toolkit (一):准备篇 eIQ™机器学习(ML)软件开发环境支持在恩智浦EdgeVerse™微控制器和微处理器(包括i.MX RT跨界MCU和i.MX系列应用处理器)上使用ML算法。eIQ ML软件包括称为eIQ Toolkit的ML工作流工具以及推理引擎、神经网络编译器和优化库。............ 阅读详情

相关推荐

RPMsg:协议简介

两台计算机可以通过TCP/IP进行通信,那么同一颗芯片上的两个核心怎么通信呢?

SunnyZhou-1024的博客 1万+

leetcode/所有路径,从点0到点n-1的所有路径

/** * 剑指 Offer II 110. 所有路径 * 给定一个有 n 个节点的有向无环图,用二维数组 graph 表示,请找到所有从 0 到 n-1 的路径并输出(不要求按顺序) * graph的第 i 个数组中的单元都表示有向图中 i号节点所能到达的下一些结点(译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a ),若为空,就是没有下一个节点了。 * * 分析: * - int[][] graph是邻接表的存储结构 * - 回溯法深度优先,由于是有向图,所以不会重复

求道问术 758

别再死磕AUTOSAR文档了!手把手教你用ISOLAR-A配置BswM模块(附实战流程图)

本文通过Vector ISOLAR-A工具实战演示AUTOSAR BswM模块的配置流程,帮助工程师快速掌握基础软件模式管理。从环境准备到模式仲裁规则配置,再到动作列表实现,详细讲解每个步骤,并提供常见问题排查和高级优化技巧,大幅提升开发效率。

weixin_42542669的博客 249

leetcode刷题(127)——1575. 统计所有可行路径,DFS解法

给你一个 互不相同 的整数数组,其中 locations[i] 表示第 i 个城市的位置。同时给你 start,finish 和 fuel 分别表示出发城市、目的地城市和你初始拥有的汽油总量每一步中,如果你在城市 i ,你可以选择任意一个城市 j ,满足 j!= i 且 0

一个码农的博客 455

摄像头模组选型避坑指南:如何根据Sensor和Lens参数匹配最佳组合

本文深入解析摄像头模组选型中Sensor与Lens的核心参数匹配要点。重点阐述了主光线角(CRA)匹配对边缘画质的关键影响,并提供了传感器尺寸、像素尺寸、焦距、光圈等参数的协同选型策略与实战避坑指南,帮助工程师在手机、安防、车载等不同应用场景下实现性能与成本的最佳平衡。

ee345的博客 618

如何在高版本的ubuntu系统里安装gcc4.1.2

1、下载安装包,一共五个http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-4.1/,根据计算机系统位数   进行下载,64位下载amd64结尾的。开头分别是cpp-4.1_4.1.2、g++-4.1_4.1.2、gcc-4.1-base_4.1.2、gcc-     4.1_4.1.2、libstdc++6-4.1 2、使用sudo d

lsr_fighting的博客 1931

LeetCode 1575. 统计所有可行路径(dp)

题意: 给你一个 互不相同 的整数数组,其中 locations[i] 表示第 i 个城市的位置。 同时给你 start,finish 和 fuel 分别表示出发城市、目的地城市和你初始拥有的汽油总量 每一步中,如果你在城市 i ,你可以选择任意一个城市 j ,满足 j != i 且 0 <= j < locations.length , 并移动到城市 j 。从城市 i 移动到 j 消耗的汽油量为 |locations[i] - locations[j]|,|x| 表示 x 的绝对值。 请

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 306

华为硬件逻辑岗笔试题(一)

积少成多,集腋成裘,坚持!!! 目录 1. 进制转换 2. 状态机和编码方式 3. 存储器的分类 4. Verilog语法中的操作符 5. 对组合逻辑的认识 6. 对时序逻辑的认识 7. 竞争冒险的认识 8. 基本时序逻辑电路 9. 建立时间和保持时间 10. 同步时序电路 11. 组合逻辑和时序逻辑判断 13. 基本总线的理解 14.加法器 15.FPGA开发工具 1. 进制转换 1、十进制46.25对应的二进制表达式为( )。 A 101110.11...

qq_42235129的博客 1万+

[记忆化dfs]leetcode1575:统计所有可行路径(hard)

思路:记忆化 dfs。

algsup 604

数据中台之流程引擎:Activiti工作流引擎详解

一. 简介 BPM: BPM规范及BPM软件 BPMN: Activiti 7 1.工作流俩种方式 1.状态值跟踪法 1.工作流软件 2.工作流引擎对比 1.Activiti 2.JBPM5 3.flowable 4.liteflow 3.步骤 1.部署Activiti 1.流程定义 1.流程定义部署 1.启动流程实例 1.任务查询代办 1.用户办理任务 1.流程结束 二. 核心 Activiti 基础架构.png Activiti 7大接口.png RepositoryService:提供一系列管理流

GIS摆渡人 1688

YOLO 系列专栏(二十九)YOLO26 × StarNet 轻量化涨点方案(CVPR 2024)轻量化、主干改进篇 | 星星卷积虽小,却蕴藏着巨大的高效潜力

StarNet 出自 CVPR 2024 轻量化主干网络工作,核心创新是,依靠逐元素乘法实现高阶特征融合,在几乎不增加参数量与 FLOPs 的前提下,大幅提升特征表达能力,天然适合等多任务统一建模。本文将 StarNet 完整替换 YOLO26 原有主干,保留 YOLO26 无 NMS 检测头与轻量化结构,实现,并提供。

qq_36130719的博客 410

leetcode 1575. 统计所有可行路径

统计所有可行路径解法目录记忆化搜索动态规划总结 记忆化搜索 我们知道,如果要实现 DFS 的话,通常有以下几个步骤: 设计好递归函数的「入参」和「出参」 设置好递归函数的出口(Base Case) 编写「最小单元」处理逻辑 对于大多数的 DFS 来说,第 1 步和第 3 步都很好实现,而找 Base Case 通常是三部曲中最难的。 以本题为例,我们来剖析一下该如何找 Base Case。 首先要明确,所谓的找 Base Case,其实是在确定什么样的情况下,算一次有效/无效。 对于本题,找 ...

m0_53157173的博客 1144

基于STM32的室内环境监测系统设计与实现

摘要 本文设计了一种基于STM32的室内环境监测系统,通过传感器实时采集温湿度、空气质量、烟雾浓度等数据,并利用Wi-Fi模块上传至云服务器。系统采用STM32F103C8T6作为主控芯片,结合DHT11、MQ系列传感器及BMP280气压传感器实现数据采集,通过ESP8266模块实现远程数据传输。用户可通过手机APP实时查看环境参数,并在数据超标时触发报警。实验表明,系统运行稳定,监测精度高,具有低成本、易扩展等特点,为改善室内环境质量提供了有效解决方案。 关键词:STM32;室内环境监测;传感器;Wi-F

3254968421的博客 221

力扣1575统计所有可行路径

这篇文章介绍了一个使用动态规划和记忆化搜索算法解决路径统计问题的方案。关键点在于统计从起点到终点所有可能的路径数,允许重复访问城市且不能燃料耗尽。作者定义dp[i][f]表示从城市i出发剩余燃料f时的路径数,通过递归遍历所有可能转移,利用记忆数组避免重复计算。算法时间复杂度为O(n²×fuel),空间复杂度为O(n×fuel),采用模运算防止数值溢出。代码实现包含初始化记忆数组的dfs函数和主调函数,清晰地展示了这个经典动态规划问题的解决方案。

2401_89332662的博客 240

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

leetcode刷题(128)——1575. 统计所有可行路径,动态规划解法

给你一个 互不相同 的整数数组,其中 locations[i] 表示第 i 个城市的位置。同时给你 start,finish 和 fuel 分别表示出发城市、目的地城市和你初始拥有的汽油总量每一步中,如果你在城市 i ,你可以选择任意一个城市 j ,满足 j!= i 且 0

一个码农的博客 452

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

leetcode1575. 统计所有可行路径

动态规划加剪枝

Turboyiyi的博客 201

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LeetCode 1575. 统计所有可行路径 深搜和动态规划解法

给你一个 互不相同的整数数组,其中locations[i]表示第i个城市的位置。同时给你start,finish和fuel分别表示出发城市、目的地城市和你初始拥有的汽油总量 每一步中,如果你在城市 i,你可以选择任意一个城市 j,满足 j != i且0 <= j < locations.length,并移动到城市j。从城市i移动到j消耗的汽油量为|locations[i] - locations[j]|,|x|表示x的绝对值。 请注意,fu...

YMY6666的博客 664

千问 LeetCode 1575.统计所有可行路径 public int countRoutes(int[] locations, int start, int finish, int fuel)

例如,你可能通过路径 A -> B -> C 到达城市 C 剩 5 单位油,也可能通过路径 D -> E -> C 到达城市 C 剩 5 单位油。因此,初始路径数设为 1。如果从当前城市 i 到终点 finish 的最短距离(直线距离)都大于剩余油量 f,那么无论怎么走都不可能到达终点,直接返回 0。我们定义 dp[i][f] 表示:当前在城市 i,剩余油量为 f 时,到达终点城市 finish 的路径总数。// 记忆化数组:memo[i][f] 表示在城市 i,剩余油量 f 时到达终点的路径数。

m0_37843156的博客 188

leetcode 困难题 1575. 统计所有可行路径-Count All Possible Routes

Problem:需要使用数学公式:|a-b| <= |a-c| + |c-b|,若从start到finish的cost > fuel则记忆化mem[start][fuel] = 0 返回0,start 到 finish 可以经过某一点 point, 要么 |start - point| + |point - finish|,point若在start和finish之间则和|start - finish|相等,若在两侧则需要的cost更多。

邹九的个人博客 82

1575. 统计所有可行路径leetcode (dfs+记忆化搜索 转 dp)

题目链接 这个题,先来一个裸dfs看看能骗几分: class Solution { public: long long num=0; void dfs(vector<int>& locations, int start,int pre, int finish, int fuel ){ if(fuel < 0){ return ; } if(start==finish){

Arc 307

dfs常规设计思路:LeetCode:#1575.统计所有可行路径

设计dfs算法有三个思路: 1. 设计好递归函数的【入参】和【出参】 2. 设计好递归函数的出口(Base Case) 3. 编写【最小单元】处理逻辑 通常Base Case是三部曲中最难的。 以一道题为例: Question: 给你一个 互不相同 的整数数组,其中 locations[i] 表示第 i 个城市的位置。同时给你 start,finish 和 fuel 分别表示出发城市、目的地城市和你初始拥有的汽油总量 每一步中,如果你在城市 i ,你可以选择任意一个城市 j ,满足 j !.

nlp87v5的博客 418

LeetCode题解(1575):统计所有可行路径(Python)

题目:原题链接(困难) 标签:动态规划 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(L2×F)O(L^2×F)O(L2×F) O(L×F)O(L×F)O(L×F) 5188ms (22%) Ans 2 (Python) Ans 3 (Python) 解法一(动态规划): class Solution: def countRoutes(self, locations: List[int], start: int, finish: i

长行 692

Leetcode 1575. 统计所有可行路径(DAY 59) ----动态规划学习期(第二题蝶直接拿下!)

原题题目 代码实现(首刷绝大部分自解小部分看解) int countRoutes(int* locations, int locationsSize, int start, int finish, int fuel){ int dp[locationsSize+1][fuel+1],restfuel,pos,des,temp,sum = 0,mod = 1000000007; memset(dp,0,sizeof(dp)); dp[start][fuel] = 1; i

Love 6's Private Blog 400

记忆化搜索到动态规划

以LeetCode 上的「1575. 统计所有可行路径」为例 缓存器的设计也十分简单,使用二维数组cache[][]进行记录即可。 我们用cache[i][fuel]代表从位置 i 出发,当前剩余的油量为 fuel 的前提下,到达目标位置的「路径数量」。 之所以能采取「缓存中间结果」这样的做法,是因为「在 i 和 fuel 确定的情况下,其到达目的地的路径数量是唯一确定的」。 ...

m0_62793606的博客 304

DFS三部曲

设计好递归函数的「入参」和「出参」 设置好递归函数的出口(Base Case) 编写「最小单元」处理逻辑 以LeetCode 上的「1575. 统计所有可行路径」 为例寻找Base Case; 首先要明确,所谓的找 Base Case,其实是在确定什么样的情况下,算一次有效/无效。 对于本题,找 Base Case 其实就是在确定:什么样的情况下,算是 0 条路径;什么样的情况下,算是 1 条路径。 然后再在 DFS 过程中,不断的累加有效情况(算作路径数量为 1)的个数...

m0_62793606的博客 181

LeeCode 1575 DP

题意 传送门 LeeCode 1575. 统计所有可行路径 题解 dp[i][j]dp[i][j]dp[i][j] 代表从 startstartstart 出发,到达城市 iii 且剩余汽油总量为 jjj 的方案数,则有递推 dp[i][j]=∑i!=i′且abs(location[i]−location[i′])+j≤fueldp[i′][j+abs(location[i]−location[i′])]dp[i][j]=\sum\limits_{i!=i'且abs(location[i]-location

neweryyy的博客 99
上一篇: 浏览器是如何进行区分你访问的网站是http还是https呢
下一篇: LeetCode 1576. 替换所有的问号
error0318
博客等级 码龄9年 57粉丝 515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值