问题:
在求出钢条切割的最高价格后,求出最优切割方案
解:
//给出价格数组p,钢条长度n,得出切割的方案。例如p ={-1,1,5,8,9,10,17,17,20,24,30},n=7,输出1,6
public static void slicepos(int[]p,int n){
int n2 = getprice4(p,n);
System.out.println(n2);
if(n-n2>0){
slicepos(p,n-n2);
}
}
//切割问题DP, 自底向上版本,可以求出切割第一段的长度
public static int getprice4(int[]p,int n){
int[] r = new int[n+1];
int[] s= new int[n+1]; //新增切割位置数组,s[n]为最终结果
for(int i=0;i<n+1;++i){
r[i]=-1;
}
r[0] = 0;
for(int j=1;j<=n;++j){
int q =-1;
for(int i=1;i<=j;++i){
//q=Math.max(q,p[i]+r[j-i]);
if(q<p[i]+r[j-i]){
q=p[i]+r[j-i];
s[j]=i;
}
}
r[j]=q;
}
return s[n];
}