NOI2009诗人小G(P=2时做法)

此题 P=2 的情况和 APIO2009 的特别行动队差不多,也可以推出凸单调性


P=2 时题意简述】

一首初始为 N 行的诗,每行包括一个句子。你可以把连续的若干个句子放在一行,但同一行的句子之间必须有一个空格。定义排版后每行的不整齐度为 (Len-L)^2 Len 表示该行的长度(包括句子之间的空格), L 是一个给定整数。要求给出一个排版方案使得排版后各行的不整齐度之和最小。


【朴素的动态规划】

用状态 F[i] 表示前 i 行经过排版后的最小不整齐度。转移方程:

F[i] = min{F[j] + (S[i]-S[j]+i-j-1-L)^2 }

其中 S[i] 表示前 i 行的句子长度之和。


【凸壳优化的动态规划】

A[i]=S[i]+i,B[i]=S[i]+i-L-1

则方程可转化为 F[j]=min{F[j] + A[j]^2 + B[i]^2 - 2*A[j]*B[i]}

对于 F[i] 的任意两个决策 p,q(0<p<q<i) ,决策 p 优于 q 的充分必要条件是

F[p] + A[p]^2 + B[i]^2 - 2*A[p]*B[i] < F[q] + A[q]^2 + B[i]^2 - 2*A[q]*B[i]

整理得

2*B[i]*(A[q]-A[p])<(F[q]+A[q]^2) - (F[p]+A[p]^2)

再令 C[i]=F[i]+A[i]^2

则上式可化为

(C[q]-C[p]) / (A[q]-A[p]) > 2*B[i]

(A[i],C[i]) 看成平面上的点,则上式左边即为斜率。因此,最优决策必满足,所有他左边的决策点与他连线的斜率小于等于 2*B[i] ,所有他右边的决策点与他连线的斜率大于 2*B[i] 。显然最优决策位于决策点 1..i-1 形成的下凸的凸壳上,因此只需维护一个维护一个下凸的凸壳就可以让决策均摊时间复杂度变为 O(1)


【程序】


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值