摘樱桃II

news/2025/1/11 12:50:35/文章来源:https://www.cnblogs.com/Xhita/p/18665342

摘樱桃II

“作为一个合格的程序员,理应具有修bug修到凌晨4点的魄力”

戳我查看原题。

题目大意


给定一个矩阵,矩阵中的每个数代表该点的樱桃个数。Robot1、Robot2分别从左上角与右上角出发,每次只能选择向正下方、左下方、右下方三个方向移动去采摘樱桃,到达矩阵的最后一行终止。若Robot1与Robot2到达同一个位置,则只有一个Robot可以获得到该点的樱桃。求Robot1与Robot2所能采摘到的最大樱桃数;

思路

这是一道简单的dfs,直接记忆化暴力搜索!(误

本人采用的是dp;由于R1与R2只能向3个方向前进,所以可以看作简单二维dp板子题的进阶版(板子题链接):统计每一层R1与R2所有可能出现的状态,在每个状态的多种不同的可能值中去取最大值作为该状态的最优解,接着在最后一层中选择樱桃最多的状态输出就能完美解决该问题。

如何记录每一层R1与R2的状态

开一个三维状态数组f[t][i][j],t表示层数,i表示robot1的状态,j表示robot2的状态;

如何推得状态方程

在理想状态下对于某一状态f[t][i][j]的robot1与robot2都有三种不同的来源,以robot1为例:位于第t层(行)第i列的robot1可以由位于第t-1层(行)第i列或第i-1列或第i+1列得到,于是乎我们便可得到f[t][i][j]的上一状态,写作状态方程为:

f[t][i][j]=max(

{f[ t - 1 ][ i ][ j ],f[ t - 1 ][ i - 1 ][ j ],f[ t - 1][ i + 1 ][ j ],

f[ t - 1 ][ i ][ j - 1 ],f[ t - 1 ][ i - 1 ][ j - 1 ],f[ t - 1 ][ i + 1 ][ j - 1 ],

f[ t - 1 ][ i ][ j + 1 ],f[ t - 1 ][ i - 1 ][ j + 1 ],f[ t - 1 ][ i + 1 ][ j + 1 ]})+grid[ t ][ i ] + grid[ t ][ j ];(grid表示该点的樱桃数)

范围问题

对于robot1,若它每次都向右下方前行则i=t,t即为i的上值;同时,我们不难推出robot2与robot1相遇是一个必然会被舍弃的情况,所以i同时也要小于j,既0<i<=min( t , j - 1 );同理我们也可以推出j的取值范围:max( i + 1 , n - t +1 )<=j<=n;

代码

点击查看代码
class Solution {
public:int cherryPickup(vector<vector<int>>& grid) {int m = grid.size(), n = grid[0].size(),rema=0;//rema用来记录达到最后一层时的最大值vector<vector<vector<int>>> f(m+1,vector<vector<int>>(n+2, vector<int>(n+2,0)));//建立状态数组,f[t][i][j]中t表示层数,i表示robot1的状态,j表示robot2的状态;
//有关三维vector的初始化有兴趣的可以去了解一下(申桑也是写这个题时才会的……)f[1][1][n]=grid[0][0]+grid[0][n-1];//起始状态(第一层)的初始化int di[]={1,1,1,0,0,0,-1,-1,-1},dj[]={0,-1,1,0,-1,1,0,-1,1};//定义向量数组,图论常用for(int t=2;t<=m;t++){//从第二层开始for(int i=1;i<min(t+1,n);i++){//注意范围!!!是谁范围写错改了一个多小时我不说(for(int j=n;j>max(i,n-t);j--){for(int d=0;d<9;d++){//向量的使用int x=i+di[d],y=j+dj[d];//用xy存储上一状态,也方便检测范围是否合法if(x>0&&x<min(t+1,y)&&y>max(x,n-t)&&y<=n){f[t][i][j]=max(f[t][i][j],f[t-1][x][y]);//先找出最大的上一状态}}f[t][i][j]+=(grid[t-1][i-1]+grid[t-1][j-1]);//加上该状态r1r2的值if(t==m)rema=max(rema,f[t][i][j]);//到达最后一层时开始筛选最大的末状态}}}return rema;//返回末状态}
};

特殊鸣谢!

@PeachyGalaxy
(多谢万能的学姐教我写博客)
@码字好累申请中译中汉化组
(其实是我自己,码字太累了想吐槽(lll¬ω¬) )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867713.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

colab上传压缩包文件,出现Unexpected end of archive问题?

Unexpected end of archive,上传图片数据集压缩包到colab上,使用命令进行解压,出现EOF错误,为啥呢?

BurpSuite实操之定序器功能使用

定序器的使用 BurpSuite的定序器是一款用于检测数据样本随机性质量的工具,通常用于检测访问令牌(sessiontoken)是否可预测、密码重置令牌是否可预测等场景,通过Sequencer的数据样本分析,能很好地降低这些关键数据被伪造的风险。操作:令牌保存到本地后查看: 我们看到token每…

G74【模板】拉格朗日插值法

视频链接:G74【模板】拉格朗日插值法_哔哩哔哩_bilibili P4781 【模板】拉格朗日插值 - 洛谷 | 计算机科学教育新生态// 拉格朗日插值法 O(n^2) #include <iostream> #include <cstring> #include <algorithm> using namespace std;#define LL long long …

【web安全】面向Web安全防护的蜜罐技术研究

摘 要 传统Web安全防护技术存在误报、漏报以及防御被动等问题,蜜罐技术的引入可有效改善此状况。本文针对面向Web安全防护的蜜罐技术进行研究,分析当前主流的Web蜜罐技术,提出蜜罐技术在Web安全防护中的应用模型,并进行了研究展望。 一、引言 随着Web2.0的发展,越来越多的…

文件筛选与提取、递归解压工具RecursiveDecompression

RecursiveDecompression是我用C#开发的一款实用工具,主要包括文件提取、递归解压缩两个功能。 假设我要把 D:\Temp\CalcNotepad 这个路径里面所有扩展名为vb的文件复制到另一个地方,一个一个复制很麻烦。 打开RD工具,选择源文件夹,然后选择目标路径D:\Test1(提前创建一个…

IT 运维服务规范(模板参考)

一、 总则 本部分规定了 IT 运维服务支撑系统的应用需求,包括 IT 运维服务模型与模式、 IT 运维服务管理体系、以及 IT 运维服务和管理能力评估与提升途径。 二、 参考标准 下列文件中的条款通过本部分的引用而成为本部分的条款。凡是注日期的引用文件,其随后所有的修改单(不…

Leetcode刷题的一些记录(Java)

Leetcode刷题 一、理论: 1. 数组: https://programmercarl.com/数组理论基础.html C++中二维数组在地址空间上是连续的。 像Java是没有指针的,同时也不对程序员暴露其元素的地址,寻址操作完全交给虚拟机。 所以看不到每个元素的地址情况,这里我以Java为例,也做一个实验。…

招行面试:亿级秒杀,超卖问题+少卖问题,如何解决?(图解+秒懂+史上最全)

本文原文链接 文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 …

OpenCL入门笔记

1、概述 1.1、OpenCL标准 OpenCL(Open Computing Language)是一个开放标准的并行编程框架,它允许开发者在异构系统上利用各种计算设备(例如CPU、GPU、FPGA等)来加速任务,目前已被广泛应用于视频处理、医学成像、机器学习等领域。 OpenCL最初由苹果公司提出,并在与AMD、IBM…

京东自动化上传图片

背景:客户目前每天需花费2小时在京东平台上传商品图片,该过程涉及手动输入SkuId并上传相应图片。由于商品数量庞大,这一操作不仅繁琐,而且容易导致错误匹配的情况。期望:通过引入自动化工具实现京东商品图片更新的自动化处理,提高操作准确性,预计每日为客户节省2小时的人…

46. bootstrap

1. bootstrap介绍中文网:https://bootcss.com/bootstrap需要导入两个文件:上方文件夹里的css文件和JavaScript文件 由于bootstrap v3依赖jQuery,因此还要导入jQuery文件bootstrap的核心是通过class直接使用类 2. 全局css样式 Bootstrap 将设置全局的 CSS 样式。HTML 的基本元…

虽然你已经更新了,但是pip依然提示[notice] A new release of pip is available

虽然你已经更新了pip的版本,但是pip依然提示[notice] A new release of pip is available,而且导致安装的时候出错。其实是在 pip 对应的文件夹中有多个.dist-info文件。 参照你的python位置,如:"..\PythonXX\Lib\site-packages\pip-{老版本}.dist-info"留一个就…