python 蓝桥杯之动态规划入门


思路:

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

DFS

滑行(DFS+ 记忆搜索)

在这里插入图片描述
在这里插入图片描述

代码分析:

  • 学会将输入的数据用二维列表保存
  • 对于递归函数的输入就用 坐标,返回值就用 实际的步数 ,这样可以方便后面的递归
  • 用一个cache 二维列表来记录结果,避免重复的运算
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)

相关推荐

  1. /动态规划】数的计算

    2024-03-12 05:00:03       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-12 05:00:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-12 05:00:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-12 05:00:03       87 阅读
  4. Python语言-面向对象

    2024-03-12 05:00:03       96 阅读

热门阅读

  1. 服务器访问慢怎么办

    2024-03-12 05:00:03       39 阅读
  2. 【力扣100】198.打家劫舍

    2024-03-12 05:00:03       41 阅读
  3. springboot参数传递总结

    2024-03-12 05:00:03       36 阅读
  4. json 基本上面试题目比较常问

    2024-03-12 05:00:03       43 阅读
  5. 大数据笔记

    2024-03-12 05:00:03       36 阅读
  6. C 语言中 #define 预处理器指令

    2024-03-12 05:00:03       38 阅读
  7. oracle 19c数据库联机备份与恢复

    2024-03-12 05:00:03       44 阅读
  8. 一些使用 Golang 实现的反沙箱技术 - Anti-Sandbox-Go

    2024-03-12 05:00:03       38 阅读
  9. OpenCV-环境搭建及基本IO接口

    2024-03-12 05:00:03       40 阅读
  10. 96.Go设计优雅的错误处理(带堆栈信息)

    2024-03-12 05:00:03       38 阅读
  11. Vue 双向数据绑定

    2024-03-12 05:00:03       40 阅读