我有一个程序,可以输出最大的收益,我可以使用递归的记忆算法来切割棒材。我正在尝试修改程序以返回削减的长度以及最大收入。我需要帮助确定需要对memoizedCutRodAux进行更改以返回q和s的帮助,并且我的printCutRod方法需要帮助。具体来说,我不理解“(r,s)= memoizedCutRod(p,n)”。谢谢您的帮助!
RodCutting类别:
public class RodCutting {
public int memoizedCutRod(int[] p, int n){
int[] r = new int[n+1];
int[] s = new int[n+1];
for (int i = 0; i < r.length; i++){
r[i]=-1;
}
return memoizedCutRodAux(p,n,r,s);
}
public int memoizedCutRodAux(int[] p, int n, int[] r, int[] s){
if(r[n]>0){
return r[n];
}
int q;
if(n==0){
q=0;
}
else{
q=0;
for(int i=0;i<n;i++){
q=Math.max(q, p[i]+memoizedCutRodAux(p,n-i-1,r, s));
s[n] = i;
}
}
r[n]=q;
return q;
//return q and s
}
public void printCutRod(int[] p, int n){
//(r,s) = memoizedCutRod(p, n)
//while (n > 0)
//print s[n]
//n = n-s[n]
}
public static void main(String[] args) {
RodCutting rc =new RodCutting();
int n = 10;
int[] p = {1, 5, 8, 9, 10, 17, 17, 20, 24, 30};
for (int i = 1; i <= n; i++) {
int rev = rc.memoizedCutRod(p, i);
System.out.println("r" + i + " = " + rev + " from solution " + i );
rc.printCutRod(p, i);
System.out.println("-------------------");
}
}
我想在当前输出中增加削减的长度以最大化收益 对于我代码中的每次切割成本,r1 = 1 //不切割,r2 = 2 //不切割,r4为2 2,r5 = 2 3 //切割2并切割3。
我希望这很清楚,可以提供一些指导。这一切在我脑海中都是有意义的; 0)