首页 > 编程语言 >AcWing901. 滑雪(python)

AcWing901. 滑雪(python)

时间:2023-05-22 16:47:54浏览次数:47  
标签:python AcWing901 sys range 爆栈 滑雪 最大值 dp

题目详情


知识点

记忆化DP

思路

自己的思路(仅参考):一开始想的是找最大值,然后从最大值开始向下滑,但是我们是要求最长路径,不一定是从最高的点滑下去的,也不一定是滑到最低点,而且会存在最大值不止一个的情况,所以我们应该是针对每一个点,都求出当前该点出发能去的最长路径,然后求完之后再遍历一边找到最大值就可以了

f[i,j]=max(四个方向的dp+1)

要注意有时候这四个方向并不是都可以走的,我们在枚举的时候要处理不能走的情况(比如越界、比如坡度不合适)

dp能做的前提:状态转换是一个拓扑图,也就是我们的状态转换关系中不能存在环,而是有一个顺序可以逐渐全部求解出来的

这道题的关键就是讲一种实现方式:全新的实现方式——递归

我们要初始化f为-1,表示从来没有访问过这个点,在之后再次调用到f的时候,如果它的值不为-1,就直接返回f的值,不用再算一遍了

python选手需要注意的一个点:python3默认的栈的深度比较小,用递归的时候可能会爆栈,所以要加上这样两行代码防止爆栈

import sys
sys.setrecursionlimit(100000) # 防止爆栈

代码

import sys
sys.setrecursionlimit(100000) # 防止爆栈
n,m = map(int,input().split())
h = [[]for i in range (n+1)]
for i in range(1,n+1):
    h[i] = list(map(int,("0 "+input()).split()))
f = [[-1 for i in range(m+1)]for i in range(n+1)] # -1表示这个状态没被算过

dx = [0,1,0,-1]
dy = [1,0,-1,0]

def dp(x,y):
    if f[x][y] != -1: return f[x][y]
    f[x][y] = 1 # 这个初始化别忘了
    for i in range(4):
        a,b = x+dx[i],y+dy[i]
        if 1 <= a <= n and 1 <= b <= m and h[a][b] < h[x][y]:
            f[x][y] = max(f[x][y],dp(a,b)+1)
    return f[x][y]

res = 0
for i in range(1,n+1):
    for j in range(1,m+1):
        # 枚举从每个点出发
        res = max(res,dp(i,j))
        # dp(i,j)
print(res)

标签:python,AcWing901,sys,range,爆栈,滑雪,最大值,dp
From: https://www.cnblogs.com/JaineCC/p/17421015.html

相关文章

  • Python竖版大屏 | 用pyecharts开发可视化的奇妙探索!
    你好!我是@马哥python说,一枚10年程序猿......
  • python控制微信发消息
    使用pyautogui控制PC版微信,发消息。importpyautoguiimporttimedefOpen_Wechat():#使用快捷键打开微信。这个微信的默认设置的快捷键。pyautogui.hotkey('ctrl','alt','w')time.sleep(1)defChat_Who(ContactPerson):#使用快捷键打开查找,找一个......
  • <Python全景系列-1> Hello World,1分钟配置好你的python环境
    《从此开始:1分钟配置好你的python环境》欢迎来到我们的系列博客《Python360全景》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。这是我......
  • < Python全景系列-2 > Python数据类型大盘点
    欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。Python作为一门强大且灵活的编程语言,拥有丰富......
  • < Python全景系列-3 > Python控制流程盘点及高级用法、神秘技巧大揭秘!
    欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。这是系列第三篇,在这篇文章中我们将全面深入地......
  • < Python全景系列-4 > 史上最全文件类型读写库大盘点!什么?还包括音频、视频?
    欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语言!本文系列第四篇,介绍史上最全PYTHON文件类型读写库大盘点!包含常用和不常用的大量文件格式!文本、音频、视频应有尽有!废话不多说!走......
  • < Python全景系列-5 > 解锁Python并发编程:多线程和多进程的神秘面纱揭晓
    欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。这是本系列的第五篇,我们将深入探讨Python中的......
  • Python 读取文件首行和最后一行
    常规方法:从前往后依次读取步骤:open打开文件。读取文件,把文件所有行读入内存。遍历所有行,提取指定行的数据。优点:简单,方便缺点:当文件大了以后时间太慢,无法忍受fname='test.html'withopen(fname,'r',encoding='utf-8')asf:#打开文件lines=f.readlines()#......
  • python从视频中导出音频
     pipinstallffmpeg pipinstallmoviepy  (wind_2021)L:\>(wind_2021)L:\>(wind_2021)L:\>pipinstallffmpegLookinginindexes:https://pypi.tuna.tsinghua.edu.cn/simpleCollectingffmpegDownloadinghttps://pypi.tuna.tsinghua.e......
  • python实现kafka收到消息然后在通过websockt发送给其他服务器的方法(异步调用并且收到
    importasyncioimportthreadingfromkafkaimportKafkaConsumerimportwebsocketsconnected=set()asyncdefhandler(websocket,path):connected.add(websocket)whileTrue:awaitasyncio.sleep(1)defstart_kafka():consumer=KafkaC......