Leetcode 3500. Minimum Cost to Divide Array Into Subarrays

  • [Leetcode 3500. Minimum Cost to Divide Array Into Subarrays](#Leetcode 3500. Minimum Cost to Divide Array Into Subarrays)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题非常惭愧,没有自己搞定,基本是抄的大佬们的代码,甚至抄完之后还是没完全理解,非常惭愧......

整体这一题的思路还是比较简单的,就是一个动态规划,剩下的问题就在于怎么写这个迭代式。

如果单纯按照题意,设置迭代方式为考察每一个位置作为第i个子串的开头,并考察其子串的终点位置时,其对应的算法复杂度就成了 O ( N 3 ) O(N^3) O(N3),这显然太大了。

因此,我们就必须要调整我们的迭代方式,将其压缩到 O ( N 2 ) O(N^2) O(N2)左右才行。

大佬们的答案最终给出的迭代关系式为如下:
d p ( t , i + 1 ) = min ⁡ j = 0 j = i ( d p ( t − 1 , j ) + ∑ α = 0 i n α ⋅ ∑ β = j + 1 i + 1 c β + k ⋅ ∑ γ = j + 1 N c γ ) dp(t, i+1) = \min\limits_{j=0}^{j=i} (dp(t-1, j) + \sum\limits_{\alpha=0}^{i}n_{\alpha} \cdot \sum\limits_{\beta=j+1}^{i+1}c_{\beta} + k \cdot \sum\limits_{\gamma=j+1}^{N}c_{\gamma}) dp(t,i+1)=j=0minj=i(dp(t−1,j)+α=0∑inα⋅β=j+1∑i+1cβ+k⋅γ=j+1∑Ncγ)

其中, d p ( t , i ) dp(t, i) dp(t,i)表示将前 i i i个数组拆分为至多 t t t个子序列,然后后续 i + 1 i+1 i+1到 n n n个元素作为剩下的子序列时其所需的最小cost。

2. 代码实现

我们将其翻译为最终的python代码语言为:

python 复制代码
class Solution:
    def minimumCost(self, nums: List[int], cost: List[int], k: int) -> int:
        n = len(nums)
        sn = list(accumulate(nums))
        sc = list(accumulate(cost, initial=0))
        
        dp = [math.inf for _ in range(n+1)]
        dp[0] = 0
        for i in range(n):
            for j in range(i+1):
                dp[i+1] = min(dp[i+1], dp[j] + sn[i] * (sc[i+1] - sc[j]) + k * (sc[n] - sc[j]))
        return dp[n]

提交代码评测得到:耗时2777ms,占用内存18.1MB。

相关推荐
YoungHong19922 小时前
面试经典150题[074]:填充每个节点的下一个右侧节点指针 II(LeetCode 117)
leetcode·面试·职场和发展
DanyHope2 小时前
LeetCode 128. 最长连续序列:O (n) 时间的哈希集合 + 剪枝解法全解析
前端·leetcode·哈希算法·剪枝
元亓亓亓3 小时前
LeetCode热题100--763. 划分字母区间--中等
算法·leetcode·职场和发展
Dream it possible!3 小时前
LeetCode 面试经典 150_回溯_全排列(100_46_C++_中等)
c++·leetcode·面试·回溯
鹿角片ljp3 小时前
力扣206.反转链表-双指针法(推荐)
算法·leetcode·链表
LYFlied3 小时前
【每日算法】LeetCode 70. 爬楼梯:从递归到动态规划的思维演进
算法·leetcode·面试·职场和发展·动态规划
一起养小猫3 小时前
LeetCode100天Day2-验证回文串与接雨水
java·leetcode
YoungHong19923 小时前
面试经典150题[073]:从中序与后序遍历序列构造二叉树(LeetCode 106)
leetcode·面试·职场和发展
业精于勤的牙3 小时前
浅谈:算法中的斐波那契数(五)
算法·leetcode·职场和发展
LYFlied3 小时前
【每日算法】LeetCode 105. 从前序与中序遍历序列构造二叉树
数据结构·算法·leetcode·面试·职场和发展