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

news2025/1/17 4:06:29

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

题目给我们一个披萨,分成了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;
    }
};

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

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

相关文章

【广州华锐视点】AR配电所巡检系统:可视化巡检利器

随着科技的发展&#xff0c;人工智能、大数据等技术逐渐应用于各个领域&#xff0c;为人们的生活带来便利。在电力行业&#xff0c;AR(增强现实)技术的应用也日益广泛。AR配电所巡检系统作为一种新型的巡检方式&#xff0c;可以实现多种功能&#xff0c;提高巡检效率&#xff0…

C++函数模板和类模板

C另一种编程思想称为泛型编程&#xff0c;主要利用的技术是模板 C提供两种模板机制&#xff1a;函数模板和类模板 C提供了模板(template)编程的概念。所谓模板&#xff0c;实际上是建立一个通用函数或类&#xff0c; 其类内部的类型和函数的形参类型不具体指定&#xff0c; 用…

【网络安全】跨站脚本(xss)攻击

跨站点脚本&#xff08;也称为 XSS&#xff09;是一种 Web 安全漏洞&#xff0c;允许攻击者破坏用户与易受攻击的应用程序的交互。它允许攻击者绕过同源策略&#xff0c;该策略旨在将不同的网站彼此隔离。跨站点脚本漏洞通常允许攻击者伪装成受害者用户&#xff0c;执行用户能够…

「UG/NX」Block UI 选择特征SelectFeature

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

【IMX6ULL驱动开发学习】08.马达驱动实战:驱动编写、手动注册平台设备和设备树添加节点信息

目录 一、使用设备树 1.1 修改设备树流程 二、手动创建平台设备 三、总结&#xff08;附驱动程序&#xff09; 前情提要&#xff1a;​​​​​​​【IMX6ULL驱动开发学习】07.驱动程序分离的思想之平台总线设备驱动模型和设备树_阿龙还在写代码的博客-CSDN博客 手动注册…

SpringjDBCTemplate_spring25

1、首先导入两个包&#xff0c;里面有模板 2、transtion事务 jDbc操作对象&#xff0c;底层默认的是事务&#xff1a; 3、我们java一般对实体类进行操作。 4、第一步写好坐标。 创建一个Account表 数据修改用update 数据进去了

音频转换工具哪个好用?能解决音频格式转换问题吗?

大千世界中的语言自然存在差异&#xff0c;不同的音频格式也有着各自的方言&#xff0c;有时候我们需要一位翻译官来帮助我们更好地欣赏这些美妙的音符。幸运的是&#xff0c;现代的科技可以让音频格式转换变得轻而易举&#xff0c;就像是在不同乐章之间穿越。无论是将古典的FL…

arm:day6

实现UART通信&#xff1a; 1.键盘输入一个字符a,串口工具显示b 2.键盘输入一个字符串"nihao",串口工具显示"nihao" uart.h #ifndef __UART4_H__ #define __UART4_H__#include "stm32mp1xx_uart.h" #include "stm32mp1xx_gpio.h" #in…

Kubernetes的endpoint

简介 Kubernetes的endpoint&#xff08;终结点&#xff09;是用于将服务绑定到集群中其他组件的网络地址。Endpoint为服务提供了一个稳定的虚拟IP地址&#xff0c;它会负责将流量从Service路由到后端Pod。 下面是使用Kubernetes的endpoint的详细步骤&#xff1a; 创建一个Se…

超声波传感器(HC-SR04)按时序图手撕驱动

目录 1、简介 2、传感器介绍 2.1 引脚介绍 2.2 时序图介绍 3、 需求与接线 3.1 任务需求 3.2 接线 4、Cubemax配置 4.1 SYS配置 4.2 RCC配置 4.3 时钟树配置 4.4 GPIO初始化 4.5 定时器配置 4.6 生成代码 5、 keil端代码编写 5.1 微妙函数封装 5.2 超声波驱动封装…

机器学习---线性判别分析

1. 基本思想 线性判别分析(Linear Discriminant Analysis, LDA)&#xff0c;也叫做 Fisher 线性判别(Fisher Linear Discriminant ,FLD)&#xff0c;是模式识别的经典算法&#xff0c;1936年由Ronald Fisher⾸次提出&#xff0c;并在1996年由 Belhumeur引⼊模式识别和⼈⼯智能…

【探索C++】用实例教你理解面向对象编程(看不懂打我版)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;软件配置等领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff01;送给自己和读者的…

软件系统工具-架构师真题(六)

_____不属于可修改性考虑的内容。&#xff08;2016&#xff09; 可维护性可扩展性结构重构可变性 答案:D 解析&#xff1a; 可修改性指快速较高的性能价格进行系统优化&#xff0c;包括可维护性、可扩展性、结构重组和可移植性四个方面。 软件系统工具中&#xff0c;软件评…

Docker 常规软件安装

1. 总体安装步骤 1. 搜索镜像 search 2. 拉取镜像 pull 3. 查看镜像 images 4. 启动镜像 - 端口映射 run 5. 停止容器 stop 6. 移除容器 rm 2. 安装tomcat 1. 搜索 docker search tomcat 2. 拉取 docker pull tomcat 3. 查看本地镜像 docker images tomcat 4. 创建容器实…

两个List合并、去重、排序

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

打通应用“壁垒”,数据分类分级结果与安全策略自动匹配

《网络安全法》、《数据安全法》等法律法规&#xff0c;以及各行业各领域与数据安全相关的标准规范&#xff0c;几乎都涉及对数据进行分类分级保护的要求。数据安全始于分类分级&#xff0c;已成为毫无疑问的行业共识。 但现实中不少用户却止步在分类分级工作&#xff0c;“如…

linux虚拟机中各服务端口及配置文件路径

查询端口状况命令&#xff1a; netstat -an| grep 端口号 查询服务状态&#xff08;服务是否开启&#xff09;命令&#xff1a;systemctl status 服务名 开启服务命令&#xff1a;systemctl start 服务名 21端口&#xff1a;FTP 文件传输服务 22端口&#xff1a;SSH协议、…

无涯教程-Perl - wait函数

描述 该函数等待子进程终止,返回已故进程的进程ID。进程的退出状态包含在$?中。 语法 以下是此函数的简单语法- wait返回值 如果没有子进程,则此函数返回-1,否则将显示已故进程的进程ID Perl 中的 wait函数 - 无涯教程网无涯教程网提供描述该函数等待子进程终止,返回已故…

怎么把pdf压缩到5m以内?压缩办法非常多

怎么把pdf压缩到5m以内&#xff1f;PDF文件是我们办公过程中较为常用的文件格式&#xff0c;PDF文件所包含的内容通常较多&#xff0c;比如文本、图像以及音视频等等。这样的话&#xff0c;PDF文件占用内存也较大。如果需要对PDF文件进行使用、传输、分享等的话&#xff0c;可能…

中路对线发现正在攻防演练中投毒的红队大佬

背景 2023年8月14日晚&#xff0c;墨菲安全实验室发布《首起针对国内金融企业的开源组件投毒攻击事件》NPM投毒事件分析文章&#xff0c;紧接着我们在8月17日监控到一个新的npm投毒组件包 hreport-preview&#xff0c;该投毒组件用来下载木马文件的域名地址竟然是 img.murphys…