动态规划/路径问题/记忆化搜索-2

leetcode第1575题

leetcode-1575统计所有可行路径

题目描述

在这里插入图片描述

分析

这里还是记录每一个城市能够到达j的路径,问题是如何记录城市、限定条件是什么

假设i,k,j是n个城市中的三个,并且有足够多的油,那么从i 到 j 可以直接从i-> j,也可以选择i->k->j,可是k->j中间可能也有城市,那么就需要找k->j之间的中转城市,再用那个找到的城市递归累加
所以:i->j = i->j之间所有中转城市能够到达j的所有路径数总和

可是必须要有足够的油才能去中转城市,所以能不能做中转城市就是看i有没有足够的油

记忆化搜索

构造DFS递归,结束条件是:剩下的油为0,或者剩下的油已经不足以到任何城市了。
用二维数组cache[i][fuel]记录,表示从以城市i为起点,剩余fuel油量的情况下,到达j的路径数
由于两个城市之间耗油量为:abs(locations[i]-locations[j]),所以只要
fuel>abs(locations[i]-locations[x]),这个城市就可以作为中转城市,那么:
cache[i][fuel]+=cache[i][][fuel-abs(locations[i]-locations[x])]

class Solution {
   
    public int countRoutes(int[] locations, int start, int finish, int fuel) {
   
        int[]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值