钢条切割问题
其实这个问题与我们大家熟知的背包问题本质上是一样的,我们来看一下问题本身:首先这里有一个价格表(表格摘自《算法导论》),表中列出了不同长度的钢条的价格:
长度 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
价格 | 1 | 5 | 8 | 9 | 10 | 17 | 17 | 20 | 24 | 30 |
假如现在我们有一块长度为5的钢条,那么我们通过切割这块钢条为不同大小的钢条后可以获得的最大利益是多少。
我们可以先从一块长度为5的钢条上截一块长度为a_legth(初始值为1)的钢条,然后考虑如何切割剩下长度为5-length的钢条,使得我们的利益最大。最终我们将a_length取不同值时所对应的最大利益进行比较,选出最大值就是我们能从一块长度为5的钢条上可以获取到的最大利益。那么我们又如何切割长度为5-length的钢条呢?这里我们可以依照之前的方式进行递推,直到最后的钢条长度变为0;
代码实现
SteelBar.h:
#pragma once
#include<iostream>
using namespace std;
class SteelBar
{
public:
//价格
int price[10+1];
//钢条的长度