跳跃-蓝桥杯真题-python解法动态规划dp
创始人
2025-06-01 02:43:30
0

题目描述

解题思路

这道题是一道很典型的动态规划问题,其中要求走到某点的权值和最大。从一点走到另一点直线距离不能超过3。那么我们先得出动态规划的最终条件

DP动态规划的最终条件

dp[x][y]=max(所有可能来这个点的dp值)+dp[x][y]

所以说我们就要求max里的内容

题给限制条件

题目给的限制条件是直线距离不能超过3,那么假如在(x,y)这个点那么我只可能从减掉以下坐标的点来

direct=[(0,1),(0,2),(0,3),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2),(3,0)]

算这些点到(x,y)的最大值我们就可以满足最终条件

DP初始条件

由于题目给的条件是有可能从以上减去direct的点来,那么

初始条件1:添加判断条件如果就是减去这些点坐标某个值小于0了说明不可能从这些点来,直接不加入max的讨论范围。例如第一排第二个其实只能有第一排第第一个来,其他都越界

初始条件2:如果都越界了,说明我们在(0,0)这个点也就是max讨论范围里没有数,那么就直接还是题给的初值

            for may_x,may_y in direct:lx=x-may_xly=y-may_yif(lx>=0 and ly>=0):res.append(dp[lx][ly])if len(res)!=0:dp[x][y]=max(res)+array[x][y]else:dp[x][y]=array[x][y]

DP的初始条件你要么就直接赋好值,这种只适合非常有规律那种比如第一列第一排。要么你就得通过限制条件让他在循环里赋予初值

代码

    a,b=map(int,input().strip().split())array=[list(map(int,input().strip().split())) for i in range(a)]dp=[[0]*b for i in range(a)]direct=[(0,1),(0,2),(0,3),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2),(3,0)]for x in range(a):for y in range(b):res=[]for may_x,may_y in direct:lx=x-may_xly=y-may_yif(lx>=0 and ly>=0):res.append(dp[lx][ly])if len(res)!=0:dp[x][y]=max(res)+array[x][y]else:dp[x][y]=array[x][y]print(dp[-1][-1])

先接受数据,然后创建初值列表和dp,依次判断满足条件的则加入dp。

最后输出dp最右下角的值最终求解

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...