第 369 场周赛 (3题,递归式动态规划)

news2024/12/27 13:58:04

第一题

在这里插入图片描述
简单题,就不多写了

class Solution:
    def findKOr(self, nums: List[int], k: int) -> int:
        ans = [0] * 31
        for n in nums:
            for i in range(31):
                if 2**i & n == 2**i:
                    ans[i] += 1
        
        return sum([2**i if ans[i] >= k else 0 for i in range(31)])

第二题

在这里插入图片描述

  1. 0 至少被替换为 1,所以替换完成后两个数组的所有元素的和的最小值 = 替换前元素的和 + 数组中 0 的数量
  2. 只有当一个数组中没有0(即它的元素和无法增大),且它的元素和小于另一个数组替换后的所有元素和的最小值的时候,才会返回 -1
  3. 当两个数组中都有 0 时,那么答案就是 max(替换完成后两个数组的所有元素的和的最小值)
class Solution:
    def minSum(self, nums1: List[int], nums2: List[int]) -> int:
        n10, n20, sum1, sum2 = 0, 0, 0, 0
        for n in nums1:
            if n == 0:
                n10 += 1
            sum1 += n
        for n in nums2:
            if n == 0:
                n20 += 1
            sum2 += n
        if n10 == 0 and sum2 + n20 > sum1:
            return -1
        if n20 == 0 and sum1 + n10 > sum2:
            return -1
        return max(sum1 + n10, sum2 + n20)

第三题

在这里插入图片描述
赛中思路:

  1. 题目理解为,在数组中任意连续的三个数中,必有一个元素大于等于 k
  2. 对于任意一个数我们可以选择将它变成大于等于 k 的数,或者不对它进行操作
  3. 定义动态规划数组 t[i][j],其中 t[i][0] 表示在把 nums[i] 变成大于等于 k 的前提下 nums[ :i + 1] 为美丽数组的最小递增运算数,t[i][1] 表示在不对 nums[i] 操作的前提下 nums[ :i + 1] 为美丽数组的最小递增运算数
  4. 更新 t[i][0] ,因为要把 nums[i] 更新为大于等于 k 的数,那么 i - 1, i - 2, i - 3必有一个是 k ,但我们不知道是哪一个,所以取 min(t[i - 3][0], t[i - 2][0], t[i - 1][0])
  5. 更新 t[i][1] ,此时不操作 nums[i],那么为了使得 i,i - 1,i - 2,中有一个为 k,所以取 min(t[i - 2][0], t[i - 1][0])
  6. 通过4,5两步发现在更新值时不需要 t[i][1] 的数据,所以就不用第 5 步了
class Solution:
    def minIncrementOperations(self, nums: List[int], k: int) -> int:
        t = [0] * len(nums)
        t[0] = max(k - nums[0], 0)
        t[1] = max(k - nums[1], 0)
        t[2] = max(k - nums[2], 0)
        for i in range(3, len(nums)):
            t[i] = min(t[i - 3], t[i - 2], t[i - 1]) + max(k - nums[i], 0)
        return min(t[-1], t[-2], t[-3])

第四题

在这里插入图片描述
困难,还是一如既往的不会做,下面贴一下大佬小羊肖恩的题解

  1. 我们定义状态不能只包含我们讨论的是哪个子树,因为这并不能完整定义走到该子树的状态,我们还得看走到子树经过的点中有多少个点进行的是第二种操作,即该子树中元素被折半了多少次。
  2. 因此我们考虑以这两个变量作为我们动态规划的状态。但是这样我们状态会有多少个呢?如果不进行任何处理,我们的状态会达到 O(n2) ,因为总共有 n 个节点,深度可能达到 O(n),因此此前折半数量有可能达到 O(n)。
  3. 但是,我们发现,每个节点的 coins[i] 不会超过 104,因此在 14 次操作后总会变成 0,因此我们折半数量可以取与 14 的最小值,这样我们的状态总数便不超过 14n 了。
  4. 状态转移的过程中,我们只需要讨论当前节点选择的是何种操作,再往下进行答案的寻找即可,具体可见代码。如果你使用的是递归,要记得加上记忆化搜索,避免重复计算相同状态。每个状态的转移次数是 O(1) 的。因此,时间复杂度为 O(nlog⁡M)
class Solution:
    def maximumPoints(self, edges: List[List[int]], coins: List[int], k: int) -> int:
        n = len(coins)
        path = [[] for _ in range(n)]
        for u, v in edges:
            path[u].append(v)
            path[v].append(u)
        @cache
        def dfs(u, p, times):
            v = coins[u] >> times
            # 两种情况下的该点收益
            res0, res1 = v - k, v // 2
            # 折半情况下,新节点前的总折半次数,大于 14 和等于 14 等价
            new_times = min(times + 1, 14)
            for v in path[u]:
                if v != p:
                    res0 += dfs(v, u, times)
                    res1 += dfs(v, u, new_times)
            return max(res0, res1)
        ans = dfs(0, -1, 0)
        # 清空 cache 能让你的 Python 跑得快一点
        dfs.cache_clear()
        return ans

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

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

相关文章

【Linux】CentOS8.4 安装docker

🦄 🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!🪁🍁🪁&…

【数据结构练习题】删除有序数组中的重复项

✨博客主页:小钱编程成长记 🎈博客专栏:数据结构练习题 🎈相关博文:消失的数字 — 三种解法超详解 删除有序数组中的重复项 1.🎈题目2. 🎈解题思路3. 🎈具体代码🎇总结 1…

多输入多输出 | Matlab实现k-means-LSTM(k均值聚类结合长短期记忆神经网络)多输入多输出组合预测

多输入多输出 | Matlab实现k-means-LSTM(k均值聚类结合长短期记忆神经网络)多输入多输出组合预测 目录 多输入多输出 | Matlab实现k-means-LSTM(k均值聚类结合长短期记忆神经网络)多输入多输出组合预测预测效果基本描述程序设计参…

提升工作效率:轻松按关键字名称归类并批量移动文件

在忙碌的工作中,我们经常需要处理大量的文件,无论是文档、图片还是其他类型的文件。如果每次都需要手动将这些文件进行分类和移动,那么将花费大量的时间和精力。因此,本文将介绍云炫文件管理器高效的方法,帮助您轻松按…

【不用开发板学习STM32】可设置电子时钟

• 实验环境 工程文件下载链接!https://mp.weixin.qq.com/s?__bizMzU2OTc4ODA4OA&mid2247551559&idx1&sn721b9238bc58936ac41e6ad1b9988554&chksmfcfb1990cb8c9086490b11c05bc76c08da15c71caa38715a047c49d36f25a149920aee482f3e&token204641…

FL Studio 21.2.0.342中文解锁版2024新增功能全面解析

好消息!FL Studio 21.2 在 10 月 26 日正式发布啦,它新增了 FL Cloud 在线采样库和 AI 音乐制作功能,还提供音乐分发到 Spotify、Apple Music 等主要音乐平台的服务。此外,还有新的音频分离功能、自定义波形颜色和新的合成器 Kepl…

性能优化必读 | AntDB-M高性能设计之线程池协程模型

实际应用场景中,一个AntDB-M节点一般会处理几千个连接,平均每个CPU需处理几百个线程连接,上下文切换频繁;一个进程的线程数太多,会消耗较多的资源,使用Pstack工具检查问题也非常困难,Pstack耗时…

软件测试---等价类划分(功能测试)

能对穷举场景设计测试点-----等价类划分 等价类划分 说明:在所有测试数据中,具有某种共同特征的数据集合进行划分分类: 1)有效等价类 2)无效等价类步骤:1)明确需求 2)确定有效和无…

使用antv x6注册vue组件报错,TypeError: Object(...) is not a function (teleport.js:3:23)

typeError: Object(…) is not a function at …/…/…/node_modules/.pnpm/antvx6-vue-shape2.1.1_antvx62.15.2vue2.7.10/node_modules/antv/x6-vue-shape/es/teleport.js (teleport.js:3:23) 点击定位到报错的位置为 reactive应该是vue 2.7.*版本才有的 由于项目在index.ht…

【多线程面试题 七】、 说一说Java多线程之间的通信方式

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:说一说Java多线程之间的…

【iOS】——知乎日报第二周总结

文章目录 一、自定义cell内容乱序问题二、WKWebView加载网页三、通过cell的协议函数进入指定网页四、滚动视图左滑加载新的网页五、隐藏导航栏 一、自定义cell内容乱序问题 当我下拉刷新的时候一开始我自定义的cell的内容顺序没有问题,当我一直下拉刷新或者上滑看以…

ZYNQ连载01-ZYNQ介绍

ZYNQ连载01-ZYNQ介绍 1. ZYNQ 参考文档:《ug585-zynq-7000-trm.pdf》 ZYNQ分为PS和PL两大部分,PS即ARM,PL即FPGA,PL作为PS的外设。 2. 方案 ZYNQ7020为双核A9架构,多核处理器常用的运行模式为AMP(非对称多处理)和…

leetcode-链表

链表是一个用指针串联起来的线性结构,每个结点由数据域和指针域构成,指针域存放的是指向下一个节点的指针,最后一个节点指向NULL,第一个结点称为头节点head。 常见的链表有单链表、双向链表、循环链表。双向链表就是多了一个pre指…

Flume 快速入门【概述、安装、拦截器】

文章目录 什么是 Flume?Flume 组成Flume 安装Flume 配置任务文件应用示例启动 Flume 采集任务 Flume 拦截器编写 Flume 拦截器拦截器应用 什么是 Flume? Flume 是一个开源的数据采集工具,最初由 Apache 软件基金会开发和维护。它的主要目的是…

基于STM32景区人流检测控制系统设计

**单片机设计介绍,1651【毕设课设】基于STM32景区人流检测控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序程序文档 六、 文章目录 一 概要 基于STM32的景区人流检测控制系统设计是一种利用STM32微控制器开发的系统,用…

“赋能信创,物联未来” AntDB数据库携高可用解决方案亮相2023世界数字经济大会

10月14日,在2023世界数字经济大会暨京甬信创物联网产融对接会上,AntDB数据库技术总监北陌应邀发表《AntDB国产分布式数据库创新演进与高可用解决方案》主题演讲,就AntDB数据库助力客户数智化升级的高可用信创解决方案进行了详实、真挚地分享&…

前端实现埋点监控

前端实现埋点&监控 实现埋点功能的意义主要体现在以下几个方面: 数据采集:埋点是数据采集领域(尤其是用户行为数据采集领域)的术语,它针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。通过埋…

nginx 内存管理(二)

共享内存 共享内存结构与接口定义nginx共享内存在操作系统上的兼容性设计互斥锁锁的结构体锁的一系列操作(core/ngx_shmtx.c)创建锁 原子操作nginx的上锁操作尝试加锁获取锁释放锁强迫解锁唤醒等待进程 slab共享内存块管理nginx的slab大小规格内存池结构…

ctfshow-web入门命令执行29

29 源代码给了禁用flag 使用tac、nl ?cecho nl f*; ?cecho tac f*; 30 多禁用了system和php 和上题区别不大,使用上一题命令就能解 ?cecho nl f*; ?cecho tac f*; 31 禁用了空格使用%09代替 ?cecho%09tac%09f*; 32 禁用了echo 使用php伪协议 ?cinclud…

不做学习的奴隶,更要注重生活

下面是国外社交软件 i n s ins ins上近 40 40 40万点赞的帖子。 “睡8小时,而不是6小时。 锻炼1小时,而不是4小时。 学习3小时,而不是10小时。 读书2小时,而不是5小时。 深度工作3小时,而不是12小时。 你是人&#xff…