【力扣每日一题】2023.8.18 3n块披萨

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

题目给我们一个披萨,分成了3n块,每次我们可以选择一块,而我们的两个小伙伴会拿走我们选的披萨的相邻的两块。

我们可以把披萨的模型转变为数组,只不过这个数组是首尾相连的:

 那么问题就变成了我们不能选择相邻的披萨,问我们可以获取的最大的披萨是多少。

这和打家劫舍2有异曲同工之妙,都是不能取相邻的两个数,并且数组也是首尾相连的:

 和打家劫舍2不同的是,本题中我们是固定取走n块披萨的,而打家劫舍2中没有明确说明偷几家。

因此本题的dp数组是二维的,dp[ i ][ j ]的含义我们定义为有 i 块披萨的情况下,我们已经获取了 j 块披萨,此时获取的最大的值。

所以我们的递推公式可以是:

dp[i][j]=max(slices[i]+dp[i-2][j-1],dp[i-1][j]);

意思是有i块披萨并且取j块披萨的情况下能获取的最大值为取本块披萨的值加上有 i - 2 块披萨并且取了 j - 1 块披萨的最大值以及不取本块披萨保持有 i - 1 块披萨且取了 j 块披萨的状态的二者的最大值。

我们再来处理一下数组首尾相连的问题,实际上数组首尾相连对我们有影响的是,不能同时取第一个元素和最后一个元素,因此我们的处理办法可以借鉴一下打家劫舍2,我们分两次动态规划,一次是假设我们没有第一块披萨然后动态规划,第二次是假设我们没有最后一块披萨然后动态规划。最后把两次的结果取一个最大值即可。

这样就不会同时取到了第一块披萨和最后一块披萨,也就满足了首尾相邻数组的限制了。

代码:

class Solution {
public:
    int maxSizeSlices(vector<int>& slices) {
        int n=slices.size();
        //dp[i][j]为有i块披萨的情况下,选择了j块披萨时能获取到的最多的数
        vector<vector<int>>dp(n,vector<int>(n/3+1,0));
        dp[0][1]=slices[0];
        dp[1][1]=max(slices[0],slices[1]);
        for(int i=2;i<n-1;i++){ //不取最后一块,所以可以不用遍历n-1
            for(int j=1;j<=n/3;j++){
                //有i块披萨并且取j块披萨的情况下能获取的最大值为
                //max(取本块披萨+有i-2块披萨并且取了j-1块披萨的最大值,
                //不取本块披萨保持有i-1块披萨且取了j块披萨的状态)
                dp[i][j]=max(slices[i]+dp[i-2][j-1],dp[i-1][j]);
            }
        }
        int res=dp[n-2][n/3];   //取第一块披萨不取最后一块披萨的情况
        dp=vector(n,vector<int>(n/3+1,0));
        dp[1][1]=slices[1];
        dp[2][1]=max(slices[1],slices[2]);
        for(int i=3;i<n;i++){
            for(int j=1;j<=n/3;j++){
                dp[i][j]=max(slices[i]+dp[i-2][j-1],dp[i-1][j]);
            }
        }
        res=max(res,dp[n-1][n/3]);  //取最后一块披萨不取第一块披萨的情况
        return res;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1x1 卷积:解释器

一、说明 在这篇博客中&#xff0c;我们将尝试深入探讨 1x1 卷积操作的概念&#xff0c;该概念出现在 Lin等人 &#xff08;2013&#xff09; 的论文“网络中的网络”和 Szegedy 等人 &#xff08;2014&#xff09; 的论文“Go Deep with Convolutions” 中&#xff0c;该论文提…

工作流自动化:提升效率、节约成本的重要工具

在现代社会中&#xff0c;软件和技术的运用使得我们的日常活动变得更加简单和高效。然而&#xff0c;这些技术也有自身的特点和独特之处。尽管我们使用这些工具来简化工作&#xff0c;但有时仍需要一些人工干预&#xff0c;比如手动数据录入。在工作场所中&#xff0c;手动数据…

Dockerfile概念、镜像原理、制作及案例讲解

1.Docker镜像原理 Linux文件操作系统讲解 2.镜像如何制作 3.Dockerfile概念 Docker网址&#xff1a;https://hub.docker.com 3.1 Dockerfile关键字 4.案例

pytest数据驱动 pandas

pytest数据驱动 pandas 主要过程&#xff1a;用pandas读取excel里面的数据&#xff0c;然后进行百度查询&#xff0c;并断言 pf pd.read_excel(data_py.xlsx, usecols[1,2])print(pf.values)输出&#xff1a;[[‘听妈妈的话’ ‘周杰伦’] [‘遇见’ ‘孙燕姿’] [‘伤心太平…

Linux 修改信号的响应方式

修改信号的响应方式 1.signal()方法介绍&#xff1a; 修改信号的响应方式要用到方法signal()。需要引用头文件signal.h。signal()的原型&#xff1a; typedef重命名了一个函数指针的类型&#xff0c;这个指针的类型为指向一个参数为int返回值为void的函数的指针。这个函数指针…

Vue编写表单常用操作(过滤和排序)

目录 HTML代码&#xff1a; js代码&#xff1a; 效果展示&#xff1a; 此次的编写代码可以直接使用 HTML代码&#xff1a; <body><div id"app"><div v-for"(value,key) in person">{{key}}--{{value}}</div><div>商品名…

[10min速通]STM32CubemMX配置W25Q128

[10min速通]&#x1f98f;STM32CubemMX配置W25Q128 文章目录 [10min速通]&#x1f98f;STM32CubemMX配置W25Q1281、下载源码2、配置Cube2.1 基础配置2.2 SPI配置 3、配置MDK3.1 添加源文件3.2 管理源文件3.3 完成接口配置 4、接口介绍4.1 初始化4.2 擦除4.3 写入4.4 读取 5、代…

利用logstash/filebeat/插件,将graylog日志传输到kafka中

1.graylog配置输出 在System-outputs&#xff0c;选择GELF Output&#xff0c;填写如下内容&#xff0c;其它选项默认 在要输出的Stream中&#xff0c;选择Manage Outputs 选择GELF Output&#xff0c;右边选择刚才创建好的test。 2.安装logstash&#xff0c;作为中间临时…

excel 之 VBA

1、excel和VBA 高效办公&#xff0c;把重复性的工作写成VBA代码&#xff08;VB代码的衍生物&#xff0c;语法和VBA相同&#xff09;。 首先打开开发工具模式&#xff0c;如果没有选显卡&#xff0c;需要手动打开 打开程序编辑界面 快捷键 altF11一般操作 程序调试&#xf…

如何使用ChatGPT创建个性化的健身锻炼计划

ChatGPT广泛应用于各个行业&#xff0c;健身也不例外。 ChatGPT 在健身领域的一个常用案例是创建个性化的锻炼计划。 在要求 ChatGPT 创建锻炼计划时&#xff0c;简单地输入自己的目标和当前的健身水平是一个很好的开始。完成此操作后&#xff0c;你还可以使用其他提示和措施来…

.net core发布到IIS上出现 HTTP 错误 500.19

1.检查.net core 环境运行环境是否安装完成&#xff0c;类似如下环境 2.IIS是否安装全 本次原因就是IIS未安装全导致的 按照网上说的手动重启iis&#xff08;iisreset&#xff09;也不行

Next.js - Route Groups(路由组)

路由组的作用 在应用程序目录中&#xff0c;嵌套文件夹通常会映射到 URL 路径。不过&#xff0c;您可以将文件夹标记为路由组&#xff0c;以防止该文件夹包含在路由的 URL 路径中。 这样就可以在不影响 URL 路径结构的情况下&#xff0c;将路由段和项目文件组织到逻辑组中。 …

win10下如何安装ffmpeg

安装ffmpeg之前先安装win10 绿色软件管理软件&#xff1a;scoop. Scoop的基本介绍 Scoop是一款适用于Windows平台的命令行软件&#xff08;包&#xff09;管理工具&#xff0c;这里是Github介绍页。简单来说&#xff0c;就是可以通过命令行工具&#xff08;PowerShell、CMD等…

mysql使用redis+canal实现缓存一致性

目录 一、开启binlog日志 1.首先查看是否开启了binlog 2、开启binlog日志&#xff0c;并重启mysql服务 二、授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限 三、下载配置canal 1、下载 canal, 访问 release 页面 , 选择需要的包下载, 如以 1.0.17 版本为例 2、 …

无脑入门pytorch系列(四)—— scatter_

本系列教程适用于没有任何pytorch的同学&#xff08;简单的python语法还是要的&#xff09;&#xff0c;从代码的表层出发挖掘代码的深层含义&#xff0c;理解具体的意思和内涵。pytorch的很多函数看着非常简单&#xff0c;但是其中包含了很多内容&#xff0c;不了解其中的意思…

一、window配置微软商店中的Ubuntu,及错误解决方法

&#xff08;1&#xff09;首先&#xff0c;在微软商店中搜索“Ubuntu”&#xff0c;下载你喜欢的版本(此处) &#xff08;2&#xff09;设置适用于window的Linux子系统&#xff0c;跟着红色方框走 点击“确定”之后&#xff0c;会提示你重启电脑&#xff0c;按要求重启电脑即可…

unity中导入自定义模型

unity中导入自定义模型 准备软件步骤1从SoildWorks中导出模型为STEP格式2将STEP格式文件导入到3DS Max中&#xff0c;再导出为FBX格式3将FBX格式导入至unity中 准备软件 需要SoildWorks、3DS Max和Unity 3D软件步骤 1从SoildWorks中导出模型为STEP格式 2将STEP格式文件导入到…

Java Persistence APl(JPA)——JPA是啥? SpringBoot整合JPA JPA的增删改查 条件模糊查询 多对一查询

目录 引出Jpa是啥&#xff1f;Jpa的使用创建实体类写dao接口类写服务类 crud增删改查增加修改根据id删除全查询分页查询 条件查询模糊查询单条件查询多条件查询模糊查询排序查询 多对一查询定义实体类auto主键策略下新增进行全查询测试 全部代码application.yml配置类pom配置文…

K8S核心组件etcd详解(上)

1 介绍 https://etcd.io/docs/v3.5/ etcd是一个高可用的分布式键值存储系统&#xff0c;是CoreOS&#xff08;现在隶属于Red Hat&#xff09;公司开发的一个开源项目。它提供了一个简单的接口来存储和检索键值对数据&#xff0c;并使用Raft协议实现了分布式一致性。etcd广泛应用…

国产化系统中遇到的视频花屏、卡顿以及延迟问题的记录与总结

目录 1、国产化系统概述 1.1、国产化操作系统与国产化CPU 1.2、国产化服务器操作系统 1.3、当前国产化系统的主流配置 2、视频解码花屏与卡顿问题 2.1、视频解码花屏 2.2、视频解码卡顿 2.3、关于I帧和P帧的说明 3、国产显卡处理速度慢导致图像卡顿问题 3.1、视频延…