No.91 - LeetCode410 - 数组划分为M组 - 最小最大组和

本文深入探讨了区间动态规划算法,一种解决最优化问题的有效方法。通过具体实例,讲解了如何利用时间复杂度为O(NNM)的算法进行数组划分,以达到最小化最大子数组和的目的。文章详细介绍了算法实现过程,包括状态定义、状态转移方程以及边界条件的设定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

区间dp:时间O(NNM)

class Solution {
public:
    int splitArray(vector<int>& nums, int m) {
        int N = nums.size();
        int M = m;
        long long dp[N+1][M+1];
        dp[0][1] = 0;
        // 右边界
        for(int R=1; R<=N; R++){
            dp[R][1] = dp[R-1][1] + nums[R-1];
            // 前面分组
            for(int k=2;k<=min(R,M);k++){
                long long T = 0;
                dp[R][k] = LLONG_MAX;
                // 左边界
                for(int L=R;L>0;L--){
                    T += nums[L-1];
                    dp[R][k] = min(dp[R][k],max(T,dp[L-1][k-1]));
                }
            }
        }
        return dp[N][M];
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值