DP练习_P1002 [NOIP2002 普及组] 过河卒_python_蓝桥杯

P1002 NOIP2002 普及组 过河卒 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

1.DFS做超时40分

python 复制代码
n, m, x, y = map(int,input().split())

flag = [[0]*(n+10) for _ in range(m+10)]
maps = [[0]*(n+10) for _ in range(m+10)]
d = [[2,1],[2,-1],[-2,1],[-2,-1],[1,2],[1,-2],[-1,2],[-1,-2],[0,0]]

for xx,yy in d:
    dx = x+xx
    dy = y+yy
    if 0<=dx<=n and 0<=dy<=m:
        maps[dx][dy] = 1

flag[0][0] = 1
ans = 0

dd = [[0,1],[1,0]]
def dfs(sx,sy):
    global ans
    if sx == n and sy == m:
        ans += 1
        return
    for xx, yy in dd:
        dx = sx+xx
        dy = sy+yy
        if 0<=dx<=n and 0<=dy<=m:
            if flag[dx][dy] == 0 and maps[dx][dy] == 0:
                flag[dx][dy] = 1
                dfs(dx,dy)
                flag[dx][dy] = 0

dfs(0,0)
print(ans)

2.DP做100分

python 复制代码
n, m, x, y = map(int,input().split())

dp = [[0]*(n+10) for _ in range(m+10)]
flag = [[0]*(n+10) for _ in range(m+10)]
d = [[2,1],[2,-1],[-2,1],[-2,-1],[1,2],[1,-2],[-1,2],[-1,-2]]

for xx,yy in d:
    dx = x+xx
    dy = y+yy
    if 0<=dx<=n and 0<=dy<=m:
        flag[dx][dy] = 1
flag[x][y] = 1
flag[0][0] = 1

dp[0][0] = 1
for i in range(n+1):
    for j in range(m+1):
        if flag[i][j] == 0:
            if i == 0:
                dp[i][j] = dp[i][j-1]
            else:
                if j == 0:
                    dp[i][j] = dp[i-1][j]
                else:
                    dp[i][j] = dp[i-1][j] + dp[i][j-1]

print(dp[n][m])
相关推荐
用户8356290780514 分钟前
如何使用 Python 对 Excel 数据进行分组和分级显示
后端·python
vx_Biye_Design15 分钟前
django房屋租赁推荐系统78455-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·express
小羊没烦恼!1 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
wanderist.2 小时前
202609CSP认证P3
算法
学Linux的语莫2 小时前
python中类的常见写法
开发语言·python·状态模式
云淡风轻~窗明几净2 小时前
角谷猜想最接近严格证明的测试 Version1.1.1
人工智能·算法·机器学习·图论
机器学习之心2 小时前
PINN × SVM × NSGA-II × 熵权TOPSIS:一套跑通「建模—优化—决策」的多目标优化框架
算法·机器学习·支持向量机
垆边人似月.3 小时前
Python中如何使用get函数实现频次查询
服务器·前端·python
AI 编程助手GPT3 小时前
GPT 脚本别只发一个文件:用 uv 把依赖和锁一起交付
人工智能·python·gpt·uv·依赖管理
别动我齐刘海3 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人