给定一个非负整数数组和一个整数 m,你需要将这个数组分成 个非空的连续子数组。设计一个算法使得这 个子数组各自和的最大值最小。

注意:
数组长度 满足以下条件:

  • 1 ≤ n ≤ 1000
  • 1 ≤ m ≤ min(50, n)

示例:

输入:
nums = [7,2,5,10,8]
m = 2
输出:18
解释:
一共有四种方法将nums分割为2个子数组。
其中最好的方式是将其分为[7,2,5][10,8],
因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。

class Solution {
public:
    int splitArray(vector<int>& nums, int m) {
        int n = nums.size();
        vector<int> sums(n + 1, 0);
        vector<vector<int>> dp(m + 1, vector<int>(n + 1, INT_MAX));
        dp[0][0] = 0;
        for (int i = 1; i <= n; ++i) {
            sums[i] = sums[i - 1] + nums[i - 1];
        }
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                for (int k = i - 1; k < j; ++k) {
                    int val = max(dp[i - 1][k], sums[j] - sums[k]);
                    dp[i][j] = min(dp[i][j], val);
                }
            }
        }
        return dp[m][n];
    }
};

410.分割数组的最大值相关推荐

  1. LeetCode 410——分割数组的最大值

    1. 题目 2. 解答 此题目为 今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第二道--最小分割分数. class Solution {public:// 若分割数组的最大值为 ...

  2. leetcode 410. 分割数组的最大值(二分法)

    1. 题目描述 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小.注意: 数组长度 n 满足以下条件:1 ≤ n ≤ ...

  3. LeetCode 410. 分割数组的最大值(极小极大化 二分查找 / DP)

    文章目录 1. 题目 2. 解题 2.1 二分查找 2.2 DP 1. 题目 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组. 设计一个算法使得这 m 个子数组各自和 ...

  4. LeetCode 410. 分割数组的最大值

    题目描述: 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小. 注意: 数组长度 n 满足以下条件: 1 ≤ n ≤ ...

  5. 410. 分割数组的最大值

    题解: 链接:https://leetcode-cn.com/problems/split-array-largest-sum/ 下面这种情况是dfs是超时的,有时间加一下记忆化 class Solu ...

  6. Leetcode 410.分割数组的最大值(最优解是二分法)

    Time: 20190904 Type: Hard, DP 题目描述 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最 ...

  7. 7、leetcode410 分割数组的最大值

    leetcode410 分割数组的最大值 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组. 设计一个算法使得这 m 个子数组各自和的最大值最小. 示例 ...

  8. 四边形不等式技巧——分割数组的最大值(画家问题)

    题目 给定一个整型数组arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再给定一个整数num,表示画匠的数量,每个画匠只能画连在一起的画作.所有的画家并行工作,请返回完成所有的画作需要的最少 ...

  9. 分割数组的最大值—leetcode410

    给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小. 注意: 数组长度 n 满足以下条件: 1 ≤ n ≤ 1000 ...

  10. 410. Split Array Largest Sum 分割数组的最大值

    给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小. 注意: 数组长度 n 满足以下条件: 1 ≤ n ≤ 1000 ...

最新文章

  1. Spring复习笔记:4
  2. linux+xampp搭建WordPress个人网站过程详解
  3. CSS响应式:根据分辨率加载不同CSS的几个方法
  4. hdu 1014 Uniform Generator 数论
  5. 64位Java开发平台的选择,如何区分JDK,Tomcat,eclipse的32位与64版本
  6. 如何将根文件系统制作成yaffs格式,并设置从yaffs启动
  7. c语言编程软件支持win8,C语言编程软件vc6.0(支持win7 / win8 / 10)官方免费版6.0
  8. js实现椭圆轨迹_javascript椭圆旋转相册实现代码
  9. 硬核干货 | 人脸识别的原理是什么?
  10. OJ上runtime error报错原因
  11. wince 德赛西威2413_德赛西威NAV262大众全系通用DVD导航产品介绍
  12. 九种引人瞩目的开源大数据技术
  13. 写法更自由的Table表格--BeeGridTable
  14. 如何使用Couchbase实现文档版本控制
  15. AFNetworkReachabilityManager检测网络状态
  16. Python小作业 列举红黄绿小球的组合
  17. 34岁王晓松的成绩单:新城控股收入股价双增,毛利率骤降9%
  18. Zigbee——串口无线透传分析
  19. 推荐一个资料:数学之美-by-吴军.pdf
  20. 解决采集卡数据波动问题

热门文章

  1. RecyclerView Widget 使用
  2. js es6 map 与 原生对象区别
  3. SpringMVC项目搭建及遇到的问题
  4. lucene查询索引之Query子类查询——(七)
  5. File API文件操作之FileReader二
  6. SQL Server数据同步的研究(单向/双向)
  7. HDU-1009 做个骑士,以梦为马
  8. 周鸿祎和马化腾对话,泄露曝光
  9. jQuery实现点击显示和隐藏内容
  10. hdu 1873“看病要排队”——优先队列的应用