当前位置 : 主页 > 编程语言 > c语言 >

钢材切割问题

来源:互联网 收集:自由互联 发布时间:2023-09-06
一、问题描述 某公司购买长钢条,将其切割后进行出售。切割钢条的成本可以忽略不计。已知卖出钢条价格表如下。求解使销售收益最大的切割方案。 价格(元) 2 5 7 9 12 14 15 19 长度


一、问题描述

某公司购买长钢条,将其切割后进行出售。切割钢条的成本可以忽略不计。已知卖出钢条价格表如下。求解使销售收益最大的切割方案。

价格(元)

2

5

7

9

12

14

15

19

长度(米)

1

2

3

4

5

6

7

8

二、初步探索

1米:1(2

2米:2(5

3米:3(7

4米:2+2(10

5米:5或2+3(12

6米:2+2+2(15

7米:2+5(17

8米:2+2+2+2(20


三、算法实现

假设a[1]、a[2]、a[3]、a[4]、a[5]、a[6]已经求解,则a[7]的求解方式为:先设置a[7]不切割的价值最大,然后与a[1]+a[6]、a[2]+a[5]、a[3]+a[4]依次比较并替换,求出最大价值。然后再从a[1]---a[7]求解a[8]。


四、代码实现

#include "stdio.h"
int main()
{
  int n,i,j,m;            //n 待切割钢材的长度    //m	钢材模板个数
  int a[]= {0,2,5,7,9,12,14,15,19};
  int b[100]= {0};
  printf("请输入要切割钢材的长度:");
  scanf("%d",&n);
  m=sizeof(a)/sizeof(int)-1;
  for(i=1; i<=n; i++)
  {
    if(i<=m)
      b[i]=a[i];
    for(j=1; j<=i; j++)
    {
      if(b[j]+b[i-j]>b[i])
        b[i]=b[j]+b[i-j];
    }
  }
  for(i=1; i<=n; i++)
    printf("%d ",b[i]);
  printf("\n%d米的钢材切割后的最大价格为%d",n,b[n]);
}


五、思考和扩展

1、自下而上的解决方法

(1)、斐波拉切数列:

1、1、2、3、5、8、13、21

(2)、杨辉三角:

     1

     1   1

     1   2   1

     1   3   3   1

     1   4   6   4   1

(3)、钢材切割问题

    

2、自上而下的解决方法

(1)、递归问题如汉诺塔

 

3、钢材切割问题的进一步思考

(1)相对最大价值法

     如:一段5米的钢材进行切割。切割的最小长度为2米。

价格(元)


5

7

9

12

14

15

19

长度(米)


2

3

4

5

6

7

8

单位长度

最大价值


2.5

2.3

2.25

2.4

2.3

2.1

2.37


     求每一段钢材的单位长度最大价值→从相对单位长度最大价值开始依次切割。

     该方法为一种可能的比较好的快速解法,但不一定是最优解。

 (2)求具体的切割方式

     目前只是求解n米的钢材切割后的最大价值,但是没有求解具体怎么切割,因此可以再进一步求解。

    

 












 

 

 

【文章转自 盐城网站开发公司 http://www.1234xp.com/yancheng.html 复制请保留原URL】
上一篇:13个代码注释的小技巧
下一篇:没有了
网友评论