钢条切割

Posted cstdio1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了钢条切割相关的知识,希望对你有一定的参考价值。

问题描述

Serling公司购买长钢条,将其切割为短钢条出售。切割工序本身没有成本支出。公司管理层希望知道最佳的切割方案。
假定我们知道Serling公司出售一段长为i英寸的钢条的价格为pi(i=1,2,…,单位为美元)。钢条的长度均为整英寸。

| 长度i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| - | - | - | - | - | - | - | - | - | - |
价格pi | 1 | 5 | 8 | 16 | 10 | 17 | 17 | 20 | 24 | 30 |

钢条切割问题是这样的:给定一段长度为n英寸的钢条和一个价格表pi(i=1,2,…n),求切割钢条方案,使得销售收益rn最大。
注意,如果长度为n英寸的钢条的价格pn足够大,最优解可能就是完全不需要切割

题解

import java.util.Scanner;

public class Main {
    public static int []maxMoney;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n= sc.nextInt();
        int []money = new int[n+1];
        for (int i = 1; i <=n; i++) {
            money[i] = sc.nextInt();
        }
        slove(money,n);
        sc.close();

    }
    private static void slove(int[] money,int length){
            maxMoney = new int[length+1];
            for(int i=1;i<=length;i++){
                for (int j = 1; j <=i ; j++) {
                    maxMoney[i] = Math.max(money[j]+maxMoney[i-j],maxMoney[i]);//常见dp解法
                }
            }
        System.out.println(maxMoney[length]);
    }

}

剪绳子同款套路
https://leetcode-cn.com/problems/jian-sheng-zi-lcof/

class Solution {
    public int cuttingRope(int n) {
        int[] dp = new int[n+1];
        if(n <= 1) return 1;
        if(n <= 3) return n-1;
        //对于大于4的绳子,到3之后就没必要分割
        dp[1] = 1;
        dp[2] = 2;
        dp[3] = 3;
        for(int i=4;i<=n;i++){
            for(int j=1;j<=i;j++){
                dp[i] = Math.max(dp[i],dp[i-j]*dp[j]);
            }
        }
        return dp[n];
    }
}






以上是关于钢条切割的主要内容,如果未能解决你的问题,请参考以下文章

钢条切割问题求解方法及相关思考

动态规划算法 ——钢条切割问题

动态规划钢条切割问题

8.13动态规划例题:钢条切割

算法导论动态规划 15.1-3 钢条切割问题

动态规划学习笔记--对于钢条切割方案的思考