ceoi2004 锯木厂选址

此题的证明和公式可搞得够呛。。我是参考了以前的几分论文一起才搞懂的

PS:谁能告诉我在csdn中怎么插入公式啊。。。

首先我们定义几个变量:

Swi=∑wi表示前i棵树的的总重量

Sdi=∑di表示第一棵树到i棵树的距离其中Sd1=0 Sdn+1】表示第一棵树到山脚锯木厂的距离

Costi表示第i棵树的位置建立一个锯木厂,然后将前i-1棵树运送到次锯木厂的总花费

其中Cost1=0

    Costi =Costi-1+Swi-1*di-11 < i <=n 

然后这里我要解释下为什么锯木厂一定在第i棵树上建而不在中间建,因为题目有个限制说树木只能从山上运往山下

那么考虑如果有一个锯木厂在ii+1之间,那么必然i+1的树木不能运到i位置,而只能往下一个运,那么第树木运到两树中间那个锯木厂和运送到某个树的锯木厂相比,花费的增量必然是前者大,所以我们可以得锯木厂必然在某个树位置上

然后现在用Transij】表示第 ij棵树全部搬到第 j棵树位置上建立的锯木厂的总花费

Transij=Costj- Costi-1-Swi-1*Sdj-Sdi-1】)其中Swi-1*Sdj-Sdi-1】)是因为有i-1棵树多算了i-1j的价值

现在我们用Fi】表示将第二个锯木厂建造在第i棵树的位置上所花费的最小代价

Fi=min{ Costj+Transj+1i+Transi+1n+1 |  1<=j<i }

到这里已经可以算是一个dp方程了,但是这个复杂度任然是On^2

然后我们继续往下走

Fij】来表示第一个伐木场建设在j第二个伐木场建设在i时的总代价

然后在这里我们要对单调性进行证明:

当有第二个伐木场建在i处时,如果最优值是在第一个锯木厂的j处时取到最优值,那么如果有第二个伐木场在i+1处时,此时的第一个伐木场的最优值不会在j位置之前取到,这也算是一个无后效性吧

证明如下(参考论文):

+++++++++++ J1 ++++++++++ J2 +++++++++++ i +++++++++

我们用数轴从左到右表示山上到山下,且J1<J2 同时F【i,J1】<F【i,J2】

F【i,j1】-F【i,j2】<0

等价于

=Cost【j1】+Trans【j1+1,i】+Trans【i+1,n+1】

-Cost【j2】-Trans【j2+1,i】-Trans【i+1,n+1】

=Cost【j1】+Cost【i】-Cost【j1】-Sw【j1】*(Sd【i】-Sd【j1】)

 -Cost【j2】-Cost【i】+Cost【j2】+Sw【j2】*(Sd【i】-Sd【j2】)

=Sw【j2】*(Sd【i】-Sd【j2】)-Sw【j1】*(Sd【i】-Sd【j1】)

=Sw【j1】Sd【j1】-Sw【j2】Sd【j2】+Sw【j2】sd【i】-Sw【j1】Sd【i】<0

然后化成斜率形式

(Sw【j1】Sd【j1】-Sd【j2】Sw【j2】)/(Sw【j1】-Sw【j2】)>Sd【i】

 

通过这个我们可以得到对于F【i,j1】 与F【i,j2】的值比较只与j1,j2有关而与i无关。既然我们化成斜率的形式,那么我们将K【J1,J2】表示为斜率

即 K【J1,J2】>Sd【i】 则j1的方案优与j2 所以问题简化成我们对于每一个i在前面找J1,J2  而且答案就是F【i】=F【i,j1】

那么我们还是通过图画出来(图来自论文):

假设K【j1,j2】>Sd[i] ,K【j2,j3】<Sd【i】 则 F【i,j1】< F【i,j2】,F【i,j2】>F【i,j3】  通过图像发现j2输入上凸函数,而我们要找的是一个下凸函数的切线 即 F【i】=F【i,j1】

 

由于Sd是:Sdi=∑di表示第一棵树到i棵树的距离其中Sd1=0 Sdn+1】表示第一棵树到山脚锯木厂的距离

那么必然Sd【i】是单调递增的,对于给定j1,j2 在i增到一定时,最优值必然是下凸曲线的切线,然后这样就是斜率优化dp了


你可能感兴趣的:(ceoi2004 锯木厂选址)