动态规划:选择原料工厂

来源:互联网 发布:picasa mac 编辑:程序博客网 时间:2024/04/23 19:56

题目:

12个工厂分布在一条东西向高速公路的两侧,工厂距离公路最西端的距离分别是0、4、5、10、12、18、27、30、31、38、39、47,在这12个工厂中选取3个原料供应厂,使得剩余工厂到最近的原料供应厂距离之和最短,问应该选哪三个厂?


1、本题实际上可以抽象为:有12个点分布在一维坐标轴上,选择3个点,使得剩余的点到最近的点的距离之和最小。

2、假设在12个工厂中选择1个工厂,应该怎么选?我们应该选择中位数位置的工厂,这样可以使之距离最近。

3、下面我们尝试着使用动态规划的算法:

设A[i][j]表示前i个工厂选择j个原料工厂的最短距离,B[i][j]表示从第i个工厂到第j个工厂选择一个原料工厂的最短距离

A[i][j]:1<=j<=i<=n  (n表示工厂的总数,下同)

B[i][j]:1<=i<=j<=n 

定义了上面的概念,我们就可以进行如下的动态规划,从前i个工厂选择j个原料厂,可分为两部分:

(1)从前k个工厂选择j-1个原料厂

(2)从第k+1个工厂到第i个工厂选择1个原料工厂

它们满足的条件分别是:1<=j-1<=k<i,k+1<=i

化简为:2<=j<=i,j-1<=k<i

根据上面的分析

A[i][j]=B[1][i],当j=1

A[i][j]=min{ A[k][j-1]+B[k+1][i] },当2<=j<=i,j-1<=k<i


0 0