2024-5-7——摘樱桃 II

news2024/11/22 11:35:11

2024-5-7

      • 题目来源
      • 我的题解
        • 方法一 记忆化搜索
        • 方法二 动态规划
        • 方法三 动态规划+空间优化

题目来源

力扣每日一题;题序:1463

我的题解

题解参考灵神的解析

方法一 记忆化搜索

因为两个机器人是同时进行,理论上到达某一行的时间是相同的,所以对两个机器人分别使用深度优先搜索,但是需要共用统一状态,防止两个机器人走到同一位置。因为存在许多状态会重复计算,因此采用记忆化搜索,在搜索过程中记录相应的结果,后序再遇见相同状态的计算直接返回记录的结果。

时间复杂度:O( m n 2 mn^2 mn2)。遍历下一位置的3×3算作常量级别
空间复杂度:O( m n 2 mn^2 mn2)

public int cherryPickup(int[][] grid) {
    int n=grid.length;
    int m=grid[0].length;
    //memo[i][j][k]的含义  A到达(i,j)和B到达(i,k)能取得的最大樱桃数
    int[][][] memo=new int[n][m][m];
    for(int[][] r:memo){
        for(int[] t:r){
            Arrays.fill(t,-1);//表示没有计算过
        }
    }
    return dfs(0,0,m-1,grid,memo);

}
public int dfs(int i,int j,int k,int[][] grid,int[][][] memo){
    int n=grid.length;
    int m=grid[0].length;
    if(i==n||j<0||j>=m||k<0||k>=m){
        return 0;
    }
    //之前计算过
    if(memo[i][j][k]!=-1){
        return memo[i][j][k];
    }
    int res=0;
    //遍历两个机器人可以到达的位置
    for(int x=j-1;x<=j+1;x++){
        for(int y=k-1;y<=k+1;y++){
            res=Math.max(res,dfs(i+1,x,y,grid,memo));
        }
    }
    //注意判断两个机器人是否到达同一个位置
    res+=grid[i][j]+(k!=j?grid[i][k]:0);
    memo[i][j][k]=res;
    return res;
}
方法二 动态规划

记忆化搜索一般情况下都能转换为动态规划。这里的动态转移方程如下:
在这里插入图片描述
在这里插入图片描述
这种定义方式没有状态能表示递归边界,即 j=−1, k=−1,这种出界的情况。因此,转移方程改为:
在这里插入图片描述
时间复杂度:O( m n 2 mn^2 mn2)。
空间复杂度:O( m n 2 mn^2 mn2)。

public int cherryPickup(int[][] grid) {
    int n=grid.length;
    int m=grid[0].length;
    //dp[i][j][k]的含义  A到达(i,j)和B到达(i,k)能取得的最大樱桃数
    int[][][] dp=new int[n+1][m+2][m+2];
    for(int i=n-1;i>=0;i--){
        for(int j=0;j<Math.min(m,i+1);j++){
            //从j+1开始 避免了到达同一位置
            for(int k=Math.max(j+1,m-1-i);k<m;k++){
                dp[i][j+1][k+1]=max(
                    dp[i+1][j][k],dp[i+1][j][k+1],dp[i+1][j][k+2],
                    dp[i+1][j+1][k],dp[i+1][j+1][k+1],dp[i+1][j+1][k+2],
                    dp[i+1][j+2][k],dp[i+1][j+2][k+1],dp[i+1][j+2][k+2]
                )+grid[i][j]+grid[i][k];
            }
        }
    }
    return dp[0][1][m];
}
public int max(int x,int...y){
    for(int t:y){
        x=Math.max(x,t);
    }
    return x;
}
方法三 动态规划+空间优化

上面的状态转移方程,在计算 f[i]时,只会用到 f[i+1],不会用到 >i+1 的状态。
可以用两个二维数组滚动计算,用 cur 表示 f[i],pre 表示 f[i+1],状态转移方程改为
在这里插入图片描述
从 i 枚举到 i−1 之前,交换 cur和 pre,相当于把 cur 变成对 i−1 而言的 pre。

时间复杂度:O( m n 2 mn^2 mn2)。遍历下一位置的3×3算作常量级别
空间复杂度:O( n 2 n^2 n2)

public int cherryPickup(int[][] grid) {
    int n=grid.length;
    int m=grid[0].length;
    //dp[i][j][k]的含义  A到达(i,j)和B到达(i,k)能取得的最大樱桃数
    int[][] preDp=new int[m+2][m+2];
    int[][] curDp=new int[m+2][m+2];
    for(int i=n-1;i>=0;i--){
        for(int j=0;j<Math.min(m,i+1);j++){
            //从j+1开始 避免了到达同一位置
            for(int k=Math.max(j+1,m-1-i);k<m;k++){
                curDp[j+1][k+1]=max(
                    preDp[j][k],preDp[j][k+1],preDp[j][k+2],
                    preDp[j+1][k],preDp[j+1][k+1],preDp[j+1][k+2],
                    preDp[j+2][k],preDp[j+2][k+1],preDp[j+2][k+2]
                )+grid[i][j]+grid[i][k];
            }
        }
        int[][] t=preDp;
        preDp=curDp;
        curDp=t;
    }
    return preDp[1][m];
}
public int max(int x,int...y){
    for(int t:y){
        x=Math.max(x,t);
    }
    return x;
}

困难题是真难做啊,不看解析很多细节考虑不到

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器人系统ros2内部接口介绍

内部 ROS 接口是公共 C API &#xff0c;供创建客户端库或添加新的底层中间件的开发人员使用&#xff0c;但不适合典型 ROS 用户使用。 ROS客户端库提供大多数 ROS 用户熟悉的面向用户的API&#xff0c;并且可能采用多种编程语言。 内部API架构概述 内部接口主要有两个&#x…

5V升9V2A升压恒压WT3231

5V升9V2A升压恒压WT3231 WT3231&#xff0c;一款性能卓越的DC-DC转换器&#xff0c;采用了集成10A、26mΩ功率的MOSFET电源开关转换器。它能够输出高达12V的电压&#xff0c;稳定可靠。这款产品以固定的600KHz运行&#xff0c;因此可以使用小型的外部感应器和电容器&#xff0…

Java 框架安全:Struts2 漏洞序列测试.

什么是 Struts2 框架 Struts 2 是一个用于创建企业级 Java 应用程序的开源框架。它是一个 MVC&#xff08;模型-视图-控制器&#xff09;框架&#xff0c;用于开发基于 Java EE&#xff08;Java Platform, Enterprise Edition&#xff09;的 Web 应用程序。Struts 2 主要解决…

flask网站开发计划

我想写一个flask开发网站的合集文章&#xff0c;该网站主要是采集网络上的文章&#xff08;不同站点&#xff0c;用Python识别出正文内容&#xff09;&#xff0c;然后做成长图形式&#xff0c;发布到flask站点&#xff0c;并提供“下载”按钮&#xff0c;点击下载按钮&#xf…

企业年中宣传的几个核心点

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 过了五一小长假&#xff0c;就来到了夏天&#xff0c;在生机勃勃的春天里&#xff0c;我们定好了全年的宣传计划&#xff0c;包括要举行哪些活动&#xff0c;参加哪些展会&#xff0c;一…

算法开篇==时间复杂度和空间复杂度

一、算法的时间复杂度 1.1 定义 衡量算法执行时间随着输入数据量增加而增加的速度。它通常用大O符号&#xff08;O&#xff09;表示&#xff0c;形式如O(n), O(), O()等&#xff0c;其中n代表输入数据的规模。 1.2 渐进分析 时间复杂度关注的是当输入数据量趋向于无穷大时&a…

LSS(Lift, Splat, Shoot)算法解析

1.简介 LSS(Lift, Splat, Shoot) 是一个比较经典的自下而上的构建BEV特征的3D目标检测算法&#xff0c;通过将图像特征反投影到3D空间生成伪视锥点云&#xff0c;通过Efficientnet算法提取云点的深度特征和图像特征并对深度信息进行估计&#xff0c;最终将点云特征转换到BEV空…

JETBRAINS IDES 分享一个2099通用试用码!IDEA 2024 版 ,支持一键升级

文章目录 废话不多说上教程&#xff1a;&#xff08;动画教程 图文教程&#xff09;一、动画教程激活 与 升级&#xff08;至最新版本&#xff09; 二、图文教程 &#xff08;推荐&#xff09;Stage 1.下载安装 toolbox-app&#xff08;全家桶管理工具&#xff09;Stage 2 : 下…

盲盒小程序怎么做?盲盒创业

盲盒作为当下的新兴行业&#xff0c;从出现就备受年轻消费者的追捧&#xff0c;成为了我国发展前景巨大的行业之一。盲盒市场不仅吸引了众多消费者&#xff0c;同时也吸引了更多的创业者&#xff0c;成为了一大创业新模式。 盲盒小程序是一种线上盲盒销售模式&#xff0c;以社…

赋能企业数字化转型 - 易点易动固定资产系统与飞书实现协同管理

在当前瞬息万变的商业环境下,企业如何借助信息化手段提升管理效率,已经成为摆在各行各业面前的紧迫课题。作为企业数字化转型的重要一环,固定资产管理的信息化建设更是不容忽视。 易点易动作为国内领先的企业资产管理服务商,凭借其全方位的固定资产管理解决方案,助力众多企业实…

Baidu Comate:你的智能编码助手,编程效率倍增的秘密武器

Baidu Comate智能编码助手 Baidu Comate 智能编码助手简单介绍安装使用查看Comate插件功能智能代码提示使用飞浆和百度智能小程序进行智能问答使用AutoWork插件实现二次函数图像的生成引用Comate知识库存在的问题结束语 Baidu Comate 智能编码助手简单介绍 Baidu Comate&#x…

信创 | 2023年中国信创产业深度研究报告(完整版)

信创产业研究报告 免责声明&#xff1a;本文资料来源于“第一新声”&#xff0c;版权归原作者所有。如涉及作品版权问题&#xff0c;请与我们联系&#xff0c;我们将在第一时间协商版权问题或删除内容&#xff01; 获取文中相关的PPT资料&#xff0c;请关注文末公众号“程序员…

创意自我介绍视频制作软件有哪些?

创意自我介绍视频制作软件 在制作创意自我介绍视频时&#xff0c;有许多软件可供选择。以下是一些推荐的软件&#xff1a; 乐秀视频剪辑&#xff1a;这是一个被8亿用户选择的视频剪辑、视频制作与Vlog剪辑工具。它提供了丰富的视频编辑功能&#xff0c;帮助用户制作出高质量的…

海云安受邀参加诸子云 4.27南京「金融互联网」私董会

4月27日&#xff0c;“安在新媒体网安用户行业活动”第四期私董会在南京顺利举办。活动以“金融&互联网”为主题&#xff0c;邀请十余位业内资深的甲方用户以及典型厂商代表。摒弃传统的议题分享&#xff0c;采取“随时问答&#xff0c;自由讨论”的形式&#xff0c;提问题…

Android 状态栏WiFi图标的显示逻辑

1. 状态栏信号图标 1.1 WIFI信号显示 WIFI信号在状态栏的显示如下图所示 当WiFi状态为关闭时&#xff0c;状态栏不会有任何显示。当WiFi状态打开时&#xff0c;会如上图所示&#xff0c;左侧表示有可用WiFi&#xff0c;右侧表示当前WiFi打开但未连接。 当WiFi状态连接时&#x…

如何应对访问国外服务器缓慢的问题?SDWAN组网是性价比之选

访问国外服务器缓慢通常由以下原因造成&#xff1a; 1、政策限制&#xff1a;我国管理互联网&#xff0c;限制部分国外网站和服务器&#xff0c;以维护国家安全稳定。 2、技术障碍&#xff1a;国内与国际互联网的网络架构和协议存在差异&#xff0c;可能导致数据传输不兼容。 …

F.softmax(cls) + 1e-4

这个代码段中的 softmax 操作结合了一个微小的常数&#xff0c;这个常数通常被称为平滑化参数。softmax 函数将原始的分类输出转换为概率分布&#xff0c;其公式如下&#xff1a; 在实践中&#xff0c;当某些分类得分特别大时&#xff0c;softmax 函数会将对应的概率接近于 1&a…

filezilla 上传文件到服务器

1. 下载windows ftp客户端 https://filezilla-project.org/index.php 点击左侧的 Download FileZilla Client All platforms 默认安装。 2. 双击打开 filezilla 按图中填写&#xff0c;并上传。 主机名: 10.20.89.* 用户名: zhuzh 密码: *** 端口: 22 点击 快速连接&#…

10个必备功能打造跨境电商平台开发全攻略

在跨境电商行业中&#xff0c;拥有一个高效且功能完善的电商平台至关重要。针对跨境电商平台开发&#xff0c;我们将介绍十个必备功能&#xff0c;帮助您全面打造优秀的跨境电商平台。 关键功能一&#xff1a;多语言支持 跨境电商平台开发的首要功能之一是多语言支持。提供多…

探秘Flex布局下子元素宽度超出的那些烦心事

嘿&#xff0c;小伙伴们&#xff01;你们有没有遇到过用Flex布局的时候&#xff0c;子元素的宽度莫名其妙地超出了父元素的情况&#xff1f;别着急&#xff0c;今天我就来给大家揭秘这个问题的来龙去脉&#xff0c;以及一些解决方案。让我们一起来深入探讨&#xff01; 发现问…