DP记录
https://blog.csdn.net/u013309870/article/details/75193592
DP学习心得。
钢条问题
公式(15.1):
一个长为10的钢锯条,要得到这个钢锯条的最优切法。有不切和切两种可能,切了之后还有不切和切两种可能,这是一个递归,直到长度为1时不能再切,这是递归出口。
记r(n)为长度为n的钢条的最优解。随便切一刀,得到两段,问题就转化为,r(n)=max{r(n - i) + r(i),p(n)}
。这两段中,再随便切一刀,得到四段,直至每个小段长为1为止,每次切割都记录当前价格,最后比较大小。类似于快速排序的划分算法。即得(15.1)公式。
公式(15.2):
简化公式,显然,上述切割方法会有重叠,即 2 + 8 和 8 + 2的切割及其其子切割。所以简化公式为,每次切割后,左段不再切割,看作一个整体,右端继续切割。即得简化公式。
注意,图中和上面的公式下标都从1开始
// 递归法 自顶向下
public int r(int[] p, int n){
int optSolution= p[n - 1]; // 初始化, 对应不切的情况
if (n == 0) {
optSolution = 0; // 递归出口
}
else {
for