地鼠逃跑计划

题目描述

有一只地鼠不小心跑进了一个m*n的矩形田地里,假设地鼠在这块田地的初始位置为(x,y),并且每次只能向相邻的上下左右四个方向移动一步,那么在最多移动K次的情况下,有多少条路径可以逃出这片田地(一旦出去田地的边界就不能再往回走)?
下面是样例示意图:

 

输入描述:

输入数据包括五个参数:m,n,x,y,K
其中m和n的范围均为是[1,10],K的范围是[0,10]。
0<=x<m,0<=y<n。

输出描述:

输出成功逃跑的路径数量。

示例1

输入输出
2
3
0
1
2
6

动态规划:

 代码:

m = int(input())
n = int(input())
x = int(input())
y = int(input())
K = int(input())
dp = [[[0 for i in range(K)]for j in range(n)]for k in range(m)]
for k in range(K):
    for i in range(m):
        for j in range(n):
            if k == 0:
                if i == 0 :
                    dp[i][j][k] += 1
                if j == 0:
                    dp[i][j][k] += 1
                if i == m-1:
                    dp[i][j][k] += 1
                if j == n-1:
                    dp[i][j][k] += 1
            else:
                temp = 0
                if i > 0:
                    temp += dp[i-1][j][k-1]
                else:
                    temp += 1
                if i < m-1:
                    temp += dp[i+1][j][k-1]
                else:
                    temp += 1
                if j > 0:
                    temp += dp[i][j-1][k-1]
                else:
                    temp += 1
                if j < n-1:
                    temp += dp[i][j+1][k-1]
                else:
                    temp += 1
                dp[i][j][k] = temp
print(dp[x][y][-1])

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
观察者模式是一种行为设计模式,用于在对象之间建立一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都能够得到通知并自动更新。在观察者模式中,有两个主要角色:观察者和目标。 观察者模式的类图如下所示: ``` +-------------------+ +-------------------+ | Subject | | Observer | +-------------------+ +-------------------+ | | | | | + attach(observer: Observer) | | | + detach(observer: Observer) | | | + notify() | | + update() | | | | | +-------------------+ +-------------------+ ▲ ▲ | | | | +-------------------+ +-------------------+ | ConcreteSubject | | ConcreteObserver | +-------------------+ +-------------------+ | | | | | | | | +-------------------+ +-------------------+ ``` 在这个类图中,Subject是目标类,它维护了一个观察者列表,并提供了方法来添加、删除和通知观察者。Observer是观察者接口,定义了一个update()方法,用于接收目标的通知。ConcreteSubject是具体的目标类,它实现了Subject接口,并在状态发生改变时通知观察者。ConcreteObserver是具体的观察者类,它实现了Observer接口,并在接收到通知时更新自己的状态。 根据你提供的引用内容,观察者模式可以应用于猫大叫一声老鼠逃跑主人惊醒的场景中。具体的类图如下所示: ``` +-------------------+ +-------------------+ | Cat | | Mouse | +-------------------+ +-------------------+ | | | | | + meow() | | + run() | | | | | +-------------------+ +-------------------+ ▲ ▲ | | | | +-------------------+ +-------------------+ | Owner | | AlarmClock | +-------------------+ +-------------------+ | | | | | + wakeUp() | | + ring() | | | | | +-------------------+ +-------------------+ ``` 在这个类图中,Cat是目标类,它有一个meow()方法用于猫大叫一声。Mouse和Owner是观察者类,它们分别有一个run()方法和wakeUp()方法,用于老鼠逃跑和主人惊醒。AlarmClock是另一个观察者类,它有一个ring()方法,用于响起闹钟。 当Cat调用meow()方法时,它会通知所有的观察者,即Mouse、Owner和AlarmClock,它们分别执行自己的动作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值