算法导论-动态规划-钢条切割补充

问题:

       在求出钢条切割的最高价格后,求出最优切割方案

解:

    //给出价格数组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];
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值