python 蓝桥杯之动态规划入门

文章目录

  • DFS
    • [滑行(DFS+ 记忆搜索)](#滑行(DFS+ 记忆搜索))

思路:

  • 要思考回溯怎么写(入参与返回值、递归到哪里,递归的边界和入口)

DFS

滑行(DFS+ 记忆搜索)


代码分析:

  • 学会将输入的数据用二维列表保存
  • 对于递归函数的输入就用 坐标,返回值就用 实际的步数 ,这样可以方便后面的递归
  • 用一个cache 二维列表来记录结果,避免重复的运算
python 复制代码
import os
import sys

n, m = map(int, input().split())
lst = [list(map(int, input().split())) for _ in range(n)]
# 递归搜索 + 保存计算结果(后面不再运算重复路线) = 记忆化搜索
cache = [[-1] * m for _ in range(n)]
# 记忆化搜索: -1代表没记录当前位置所能达到的最远距离,其他值代表已经记录了当前位置所能达到的最远距离并且就是记录的就是当前位置最远距离

def dfs(x, y):  # 当前位置所能达到的最远距离
    if cache[x][y] != -1:  # 如果被记录过了
        return cache[x][y]  # 就不再往下计算了,并且返回当前位置所能达到的最远距离
    ans = 1
    for dx, dy in [(1, 0), (-1, 0), (0, 1), (0, -1)]:
        xx = dx + x
        yy = dy + y
        if 0 <= xx < n and 0 <= yy < m and lst[xx][yy] < lst[x][y]:
            ans = max(dfs(xx, yy) + 1, ans)
    cache[x][y] = ans  # 每次走到尽头了就记录一下当前这条路线走了几步(距离)
    return ans  # 返回当前位置所能达到的最远距离


res = 0
for i in range(n):
    for j in range(m):
        res = max(dfs(i, j), res)

print(res)
相关推荐
用户8356290780511 小时前
自动化文档处理:Python 批量提取 PDF 图片
后端·python
多恩Stone18 小时前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ40220549618 小时前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django
百锦再18 小时前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
QQ51100828518 小时前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
QQ_196328847518 小时前
Python-flask框架西山区家政服务评价系统网站设计与开发-Pycharm django
python·pycharm·flask
遥遥江上月18 小时前
Node.js + Stagehand + Python 部署
开发语言·python·node.js
B站计算机毕业设计超人18 小时前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计
B站_计算机毕业设计之家18 小时前
电影知识图谱推荐问答系统 | Python Django系统 Neo4j MySQL Echarts 协同过滤 大数据 人工智能 毕业设计源码(建议收藏)✅
人工智能·python·机器学习·django·毕业设计·echarts·知识图谱
计算机专业码农一枚18 小时前
Python-flask框架基于推荐算法的在线课程推荐系统设计与实现-Pycharm django
python·flask·推荐算法