最小m段和问题
来源:互联网 发布:彭真 知乎 编辑:程序博客网 时间:2024/06/05 10:39
问题
给定 n 个整数组成的序列,现在要求将序列分割为 m 段,每段子序列中的数在原序列中连续排列。如何分割才能使这m段子序列的和的最大值达到最小?
动态规划
- 动态规划的解法:
- 阶段数为m.
状态转移方程:
f[i][j]=min max{ f[i][1]-f[k][1],f[k][j-1]}
其中1<=k< i;
j<= i <=n; 1<= j <= m;
初态:f[i][1]=f[i-1][1]+a[i]
最优值为f[n][m]。- 对于第j阶段中的每个 i, (j<=i <=n),考虑将1到i的序列分为j段子序列,且第j段序列从k开始到i,
由最优子结构性质,只需比较第j段序列和第j-1阶段的最优值即可。
决策变量:第j段序列分配i-k个元素.
code
public int maxAddM(int[] nums, int m) { int[][] weights = new int[nums.length + 1][m + 1]; for (int i = 1; i <= nums.length; i++) { weights[i][1] += weights[i - 1][1] + nums[i - 1]; } for (int j = 2; j <= m; j++) { for (int i = j; i <= nums.length; i++) { int temp = Integer.MAX_VALUE; for (int k = 1; k < i; k++) { int max = Math.max(weights[i][1] - weights[k][1], weights[k][j - 1]); temp = temp > max ? max : temp; } weights[i][j] = temp; } } return weights[nums.length][m]; }
0 0
- 最小m段和问题
- 最小m段和问题
- 最小M段和问题
- 最小m段和问题
- 最小m段和问题
- 最小m段和问题
- 最小m段和问题
- 最小m段和问题
- 最小m段和问题
- 最小m段和问题
- 【dp】最小m段和问题
- 算法 最小M段和问题
- 最小m段和
- 最小m段和
- 最小m段和
- 最小m段和
- 最小m段和(DP)
- 最小m段和dp
- 《C++0x漫谈》系列之:Concept, Concept!
- oracle11g dataguard 线上维护问题记录
- 基于Theano的深度学习(Deep Learning)框架Keras
- Spring整合Hibernate中自动建表
- iOS --- 使用runtime解决3D Touch导致UIImagePicker崩溃的问题
- 最小m段和问题
- getview重复调用问题
- Linux并发(子进程退出状态的处理)
- 第四周项目 猜数
- PADS覆铜地线为什么不能连在一起呢?
- 学术搜索及谷歌学术镜像
- sizeof运算符
- [LeetCode 335] Self Crossing
- JAVA第七节-继承,继承中方法重写,继承的初始化顺序,final关键字,super关键字,object类