python3 题解(53 车队入栈问题)

本文探讨了如何解决车队通过一个单车道检查站的问题,分析了没有检查站时的情况,并针对3辆车的情况进行了讨论。通过递归思考方法,引入f(m,n)表示右边车辆和站内车辆的状态,提出利用缓存避免重复计算的方法,提高效率。同时推荐了小甲鱼和耿老师的Python教程资源。" 112203841,10535946,Arduino无线蓝牙温湿度与超声波测距系统搭建,"['Arduino', '蓝牙通信', '温湿度测量', '超声波测距', '无线通信']
摘要由CSDN通过智能技术生成

车队入栈问题

【题目】编号为 1,2…n 的一个车队,从右向左行驶。道路只能容一辆车通过,无法超车。
中间有个死胡同,作为检查站。所有经过车辆必需入站检查。也可能进行很复杂检查,也可能不检查,入站后,马上出站继续上左边的路行驶。检查站容量很大,且也是单车道。
求这n辆车最后在左边道路上的排列有多少种可能。
在这里插入图片描述
分析:
如果是 1 辆车,当然只 1 种可能。2 辆车则 2 种。
现在考虑 3 辆车的情况。如果没有检查站,则有 6 种排列可能。
加了检查站后,就不是所有情况都可能了。
比如: 312 就不可能。
因为,如果 3 号车先出来,1,2 号肯定在站里。那么它们的顺序就不是任意了。

此问题看似复杂,换个角度就容易多了。
用递归的思考方法。
设 f(m,n) 表示右边有 m 辆车,站内有 n 辆车。它表示当前的状态。
在此状态下,下一步的操作最多只有两种可能:

  1. 右边一辆车开入站中。
  2. 站中一辆车开出到左边。
### 车队入栈问题
def che_dui(n):
    def f(x,y): ## 右边有x辆,栈中有y辆
        if x==0: return 1
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值