lintcode 1251. 拆分子数组

1251. 拆分子数组

给定一个由非负整数和整数m组成的数组,可以将数组拆分为m个非空连续子数组。编写算法以最小化这些m个子阵列中的最大总和。

样例

输入:
nums = [7,2,5,10,8]
m = 2

输出:
18

解析:
将nums拆分成子数组的方式有4种.
最好的选择是拆分成 [7,2,5] 和 [10,8],
两个子数组中的最大的和只有 18.

注意事项

如果n是数组的长度,则假定满足以下约束:

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

输入测试数据 (每行一个参数)

思路:由前面拆分到m-1个子串得到

public class Solution {
    /**
     * @param nums: a list of integers
     * @param m: an integer
     * @return: return a integer
     */
    public int splitArray(int[] nums, int m) {
        int[][] dp=new int[m][nums.length];
        dp[0][0]=nums[0];
        for(int i=1;i=0;k--){
                    dp[i][j]=Math.min(dp[i][j],Math.max(dp[i-1][k],sum));
                    sum+=nums[k];
                }
            }
        }
        return dp[m-1][nums.length-1];
    }
}

 

你可能感兴趣的:(leetcode,and,lintcode)