游游的最大gcd - 携程笔试

最大gcd

题目描述

游游拿到了一个长度为n的数组 ,请你在不改变元素原有顺序的情况下将其分成恰好m个非空子数组,对m个子数组分别计算数组内所有元素的gcd值,请问这m个非空子数组内部的gcd值之和的最大值是多少。

最大公约数(gcd)指能够整除多个非零整数的最大正整数。分割指的是将数组分成若干个连续的子数组,每个元素都必须分到一个子数组中,且子数组之间不能有重叠部分,子数组的并集要能够完全覆盖整个数组。

输入

第一行两个整数表示n,m。 第二行几个整数表示数组 a[i]。

输出

输出一行一个整数表示答案。

示例1

输入:
4 2
5 6 3 2

输出:
6

题解

这个问题可以用动态规划来解决。我们可以使用一个二维数组 dp 来表示前 i 个元素被分成 j 段的情况下,GCD 和的最大值。为了更高效地计算子数组的 GCD,我们可以提前预处理每个子数组的 GCD 值。

代码思路:

  1. 预处理 GCD 值:
    • 使用 gcd[i][j] 表示从第 i 个元素到第 j 个元素的 GCD 值,使用递推的方式计算所有子数组的 GCD。
  2. 动态规划数组 dp:
    • dp[i][j] 表示前 i 个元素被分成 j 段时,所有段的 GCD 和的最大值。
    • 初始化 dp[0][0] = 0,即前 0 个元素分成 0 段时的 GCD 和为 0
  3. 状态转移方程:
    • 对于每个位置 i 和每个分段数 j,我们尝试将 i 前面的部分分为 j-1 段,然后把 i 开始的部分作为新的子段: 其中 k 是上一个子段的结束位置。
  4. 输出结果:
    • 最终 dp[n][m] 就是我们要找的答案。

C++

#include <iostream>
#include <vector>
#include <algorithm>

us

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

🔥笔试编程真题宝典💯 文章被收录于专栏

📕分享大厂机试真题深度剖析核心考点,助你速通面试。

全部评论
动态规划 时间空间复杂度这么大,也好意思贴出来?二分法+贪心!
点赞 回复 分享
发布于 2024-10-10 20:41 上海
佬,为啥gcdVal[i][j] = gcd(gcdVal[i][j-1],a[j]) 而不是gcd(a[i],a[j])
点赞 回复 分享
发布于 2024-10-10 16:20 江苏
我一样的做法超时了😢
点赞 回复 分享
发布于 2024-10-10 14:25 江苏

相关推荐

泥给路哒油:真的不行了,以后趋势就是没有前后端职位之分了,我现在就是什么都干,有了ai就能干全栈,md年初目送一大堆同事毕业
点赞 评论 收藏
分享
评论
10
12
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
6678次浏览 64人参与
# 你的实习产出是真实的还是包装的? #
1331次浏览 32人参与
# 米连集团26产品管培生项目 #
4790次浏览 206人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7120次浏览 37人参与
# 简历第一个项目做什么 #
31334次浏览 315人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186557次浏览 1115人参与
# 巨人网络春招 #
11223次浏览 223人参与
# 研究所笔面经互助 #
118790次浏览 577人参与
# 面试紧张时你会有什么表现? #
30416次浏览 188人参与
# 简历中的项目经历要怎么写? #
309597次浏览 4167人参与
# 职能管理面试记录 #
10726次浏览 59人参与
# AI时代,哪些岗位最容易被淘汰 #
62775次浏览 750人参与
# 网易游戏笔试 #
6377次浏览 83人参与
# 把自己当AI,现在最消耗你token的问题是什么? #
7007次浏览 154人参与
# 腾讯音乐求职进展汇总 #
160447次浏览 1107人参与
# 从哪些方向判断这个offer值不值得去? #
56712次浏览 357人参与
# 正在春招的你,也参与了去年秋招吗? #
362753次浏览 2632人参与
# 你怎么看待AI面试 #
179440次浏览 1183人参与
# 小红书求职进展汇总 #
226916次浏览 1357人参与
# 你的房租占工资的比例是多少? #
92147次浏览 896人参与
# 校招笔试 #
467856次浏览 2955人参与
# 经纬恒润求职进展汇总 #
155723次浏览 1085人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务