首页 > 其他分享 >LC1388 3n 块披萨

LC1388 3n 块披萨

时间:2023-08-19 20:55:24浏览次数:39  
标签:DP slices int 披萨 选取 LC1388 3n dp

环形 DP 求最大值。

题目可以转化为:在一个大小为 \(3n\) 的环上选取互不相邻的 \(n\) 个数,使其和最大。

这个问题如果在链上,显然可以通过 DP 解决。设 \(dp_{i,j}\) 表示截止到 \(i\),选取了 \(j\) 个数的最大值,可以写出转移方程:\(dp_{i,j}=\max(dp_{i-1,j}, dp_{i-2,j-2}+slices_i)\)。

初始化:因为是求最大值,将 DP 数组初值设为 \(-\infty\),因为涉及到 \(i-2\),所以要预先设置 \(i=0,i=1\) 的情况。

现在问题是在环上,对于环形 DP 有两种解决方法:破环为链和两次 DP。前者方便循环取用原数组,后者方便处理 DP 数组。观察式子可知本题使用两次 DP 法:如果选取了第一块,则最后一块不会选取;如果选取了最后一块,则第一块不会选取。所以一次去头、一次去尾(保证选不到头或者尾),DP 两次,取两次的最大值作为答案。

AC 代码:

func calculate(slices []int) int {
    N, n := len(slices), (len(slices) + 1) / 3 //这里的数组长度变成了3n-1
    dp := make([][]int, N)
    for i := 0; i < N; i++ {
        dp[i] = make([]int, n + 1)
        for j := 1; j <= n; j++ {
            dp[i][j] = -0x3f3f3f3f
        }
    }
    dp[0][0], dp[1][0], dp[0][1], dp[1][1] = 0, 0, slices[0], max(slices[0], slices[1])
    for i := 2; i < N; i++ {
        dp[i][0] = 0
        for j := 1; j <= n; j++ {
            dp[i][j] = max(dp[i - 1][j], dp[i - 2][j - 1] + slices[i])
        }
    }
    return dp[N - 1][n]
}

func maxSizeSlices(slices []int) int {
    return max(calculate(slices[1:]), calculate(slices[:len(slices) - 1]))
}

几点收获:

  1. 积极主动地把题目情景转化为数学语言描述;
  2. 两种环形 DP 的思路。

标签:DP,slices,int,披萨,选取,LC1388,3n,dp
From: https://www.cnblogs.com/th19/p/17643040.html

相关文章

  • Leetcode 1388. 3n 块披萨
    (本文只提供了解题思路的思考,原文作者题解连接)先把题目粘贴在这里给你一个披萨,它由3n块不同大小的部分组成,现在你和你的朋友们需要按照如下规则来分披萨:你挑选任意一块披萨。Alice将会挑选你所选择的披萨逆时针方向的下一块披萨。Bob将会挑选你所选择的披萨顺时针方向......
  • 2023NepCTF-RE部分题解
    2023NepCTF-RE部分题解九龙拉棺过反调试很容易发现void__stdcallsub_401700()里面有tea的痕迹接出来发现只是前半部分#include<stdio.h>#include<stdint.h>#include"defs.h"#include<stdio.h>#include<stdio.h>#include<stdint.h>//加密函数......
  • Even(23Nowcoder6.J)(二分+可持久化线段树)
    题意:给定一个序列\(a\),定义一次操作选择序列中一个元素\(a[i]\),使\(a_i=\lfloor\frac{a_i}{2}\rfloor\),其中\(a_i\)为当前序列中的最大偶数,若没有则是最大奇数。有\(q\)组询问,每次给定\(k,l,r\)分别表示操作次数和操作区间,每次回答操作完成后区间中的\(Max\),询问间互相......
  • VMware ESXi 7.0 U3n macOS Unlocker & OEM BIOS (标准版和厂商定制版) 2023年8月更新
    VMwareESXi7.0U3nmacOSUnlocker&OEMBIOS(标准版和厂商定制版)2023年8月更新ESXi7.0标准版和Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)、Cisco(思科)定制版镜像请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3-oem/,查看最新版。原创作品,转......
  • MS31703NA——H 桥栅极驱动控制器
    MS31703NA是一款小型单通道H桥栅极驱动器。它使用四个外部N通道MOSFET,驱动一个双向刷式直流电机。PH/EN、独立半桥或PWM允许轻松连接到控制器电路。内部传感放大器提供可调的电流控制。集成的电荷泵可提供100%占空比,而且可用于驱动外部反向电池开关。独立半桥模式......
  • VMware ESXi 7.0 U3n macOS Unlocker & OEM BIOS (标准版和厂商定制版)
    VMwareESXi7.0U3nmacOSUnlocker&OEMBIOS(标准版和厂商定制版)ESXi7.0标准版和Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)、Cisco(思科)定制版镜像请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3-oem/,查看最新版。原创作品,转载请保留出处。......
  • VMware ESXi 7.0 U3n macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动
    VMwareESXi7.0U3nmacOSUnlocker&OEMBIOS集成网卡驱动和NVMe驱动(集成驱动版)ESXi7U3标准版集成Intel网卡、USB网卡和NVMe驱动请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3-sysin/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org2023......
  • VMware vCenter Server 7.0 Update 3n 下载 - 集中管理 vSphere 环境
    VMwarevCenterServer7.0Update3n下载-集中管理vSphere环境请访问原文链接:https://sysin.org/blog/vmware-vcenter-7-u3/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMwarevCenterServer是一款高级服务器管理软件,提供了一个集中式平台来控制vSphere......
  • VMware ESXi 7.0 Update 3n - 领先的裸机 Hypervisor
    VMwareESXi7.0Update3n-领先的裸机HypervisorVMwareESXi7.0Update3nStandard&AllCustomImageforESXi7.0U3mInstallCD更新日期:FriJul07202310:50:00GMT+0800,阅读量:4518请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3/,查看最新版。原创作......
  • VMware vSphere 7 Update 3n 下载
    VMwarevSphere7Update3n下载vCenterServer&ESXi,DellEMC,HPE,Cisco,LENOVO,FUJITSU,NEC,Inspur,HitachiCustomImage请访问原文链接:https://sysin.org/blog/vmware-vsphere-7-u3/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org服务器虚拟化软件vS......