bzoj-1010 玩具装箱/文章断行

bzoj-1010 玩具装箱/文章断行


题目:P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中。P教授有编号为 1 … N 1…N 1N N N N件玩具,第 i i i件玩具经过压缩后变成一维长度为 C i C_i Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的。同时如果一个一维容器中有多个玩具,那么两件玩具之间要加入一个单位长度的填充物,形式地说如果将第 i i i件玩具到第 j j j个玩具放到一个容器中,那么容器的长度将为制 x = j − i + ∑ k = 1 j C k x=j - i + \sum ^j_{k=1} C_k x=ji+k=1jCk作容器的费用与容器的长度有关,根据教授研究,如果容器长度为 xx ,其制作费用为 ( X − L ) 2 (X-L)^2 (XL)2.其中 L 是一个常量。P教授不关心容器的数目,他可以制作出任意长度的容器,甚至超过 L 。但他希望费用最小.


首先定义方程:设在第 i i i个玩具所需的费用为: d p ( i ) dp(i) dp(i),则可以列出动态规划方程:

d p ( i ) = min ⁡ 0 ≤ j &lt; i { d p ( j ) + ( i − j − 1 − L + ∑ k = j + 1 i C k ) 2 } = min ⁡ 0 ≤ j &lt; i { d p ( j ) + ( i − j − 1 − L + ∑ k = 1 i C k − ∑ k = 1 j C k ) 2 } = min ⁡ 0 ≤ j &lt; i { d p ( j ) + [ ( i + ∑ k = 1 i C k ) − ( j + ∑ k = 1 j C k ) − 1 − L ] 2 } = min ⁡ 0 ≤ j &lt; i { d p ( j ) + [ ( i − 1 + ∑ k = 1 i C k ) − ( j + L + ∑ k = 1 j C k ) ] 2 } dp(i) = \min_{0\leq j &lt; i} \{dp(j) + (i - j - 1 -L + \sum^i_{k=j+1}{C_k})^2\} \\ = \min_{0\leq j &lt; i} \{dp(j) + (i - j - 1 -L + \sum^i_{k=1}{C_k} - \sum^j_{k=1}{C_k})^2\} \\ = \min_{0\leq j &lt; i} \{dp(j) + [(i + \sum^i_{k=1}{C_k}) - (j + \sum^j_{k=1}{C_k}) - 1 -L ]^2\} \\ = \min_{0\leq j &lt; i} \{dp(j) + [(i - 1 + \sum^i_{k=1}{C_k}) - (j + L + \sum^j_{k=1}{C_k})]^2\} \\ dp(i)=0j<imin{dp(j)+(ij1L+k=j+1iCk)2}=0j<imin{dp(j)+(ij1L+k=1iCkk=1jCk)2}=0j<imin{dp(j)+[(i+k=1iCk)(j+k=1jCk)1L]2}=0j<imin{dp(j)+[(i1+k=1iCk)(j+L+k=1jCk)]2}
令: a ( i ) = i − L + ∑ k = 1 i C k , b ( i ) = i + 1 + ∑ k = 1 i C k a(i) =i - L + \sum^i_{k=1} C_k, b(i) =i + 1 + \sum^i_{k=1} C_k a(i)=iL+k=1iCk,b(i)=i+1+k=1iCk,则:
d p ( i ) = min ⁡ 0 ≤ j &lt; i { d p ( j ) + [ a ( i ) − b ( j ) ] 2 } = min ⁡ 0 ≤ j &lt; i { d p ( j ) + a ( i ) 2 + b ( j ) 2 − 2 a ( i ) b ( j ) } = min ⁡ 0 ≤ j &lt; i { − [ 2 a ( i ) b ( j ) ] + [ d p ( j ) + a ( i ) 2 + b ( j ) 2 ] } dp(i) = \min_{0\leq j &lt; i} \{dp(j) + [a(i) - b(j)]^2\} \\ = \min_{0\leq j &lt; i} \{dp(j) + a(i)^2 + b(j)^2 - 2a(i)b(j)\} \\ = \min_{0\leq j &lt; i} \{-[2a(i)b(j)] + [dp(j) + a(i)^2 + b(j)^2]\} \\ dp(i)=0j<imin{dp(j)+[a(i)b(j)]2}=0j<imin{dp(j)+a(i)2+b(j)22a(i)b(j)}=0j<imin{[2a(i)b(j)]+[dp(j)+a(i)2+b(j)2]}
由于 a ( i ) 2 a(i)^2 a(i)2 j j j无关,则:
d p ( i ) = a ( i ) 2 + min ⁡ 0 ≤ j &lt; i { − [ 2 a ( i ) b ( j ) ] + [ d p ( j ) + b ( j ) 2 ] } dp(i) = a(i)^2 + \min_{0\leq j &lt; i} \{-[2a(i)b(j)] + [dp(j) + b(j)^2]\} dp(i)=a(i)2+0j<imin{[2a(i)b(j)]+[dp(j)+b(j)2]}
K i = 2 a ( i ) , X j = b ( j ) , Y j = d p ( j ) + b ( j ) 2 K_i = 2a(i), X_j = b(j), Y_j = dp(j) + b(j)^2 Ki=2a(i),Xj=b(j),Yj=dp(j)+b(j)2,即可将其化简为:
d p ( i ) = min ⁡ 0 ≤ j &lt; i { − K i X j + Y j } dp(i) = \min_{0\leq j &lt; i} \{-K_iX_j+Y_j\} dp(i)=0j<imin{KiXj+Yj}
的形式,进行斜率优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值