[kuangbin带你飞]专题二十 斜率DP

A

裸题,不写了

B      hdu 2829

dp[i][j] d p [ i ] [ j ]为前i i个点分j段的最小值

val[i][j] v a l [ i ] [ j ][i,j] [ i , j ]的点为一段时的值,val[i] v a l [ i ]表示val[1][i] v a l [ 1 ] [ i ]

sum[i] s u m [ i ]为前缀和

val[i][j]=val[j]val[i1]+sum[i1](sum[j]sum[j1]) v a l [ i ] [ j ] = v a l [ j ] − v a l [ i − 1 ] + s u m [ i − 1 ] ⋅ ( s u m [ j ] − s u m [ j − 1 ] )

dp方程:

dp[i][j]=min(dp[k][j1]+val[k+1][i])(k<i) d p [ i ] [ j ] = m i n ( d p [ k ] [ j − 1 ] + v a l [ k + 1 ] [ i ] ) ( k < i )

dp[i][j]=dp[k][j1]+val[i]val[k]sum[k](sum[i]sum[k]) ⇒ d p [ i ] [ j ] = d p [ k ] [ j − 1 ] + v a l [ i ] − v a l [ k ] − s u m [ k ] ⋅ ( s u m [ i ] − s u m [ k ] )

sum[i]sum[k]+dp[i][j]val[i]=dp[k][j1]val[k]+sum[k]2 ⇒ s u m [ i ] ⋅ s u m [ k ] + d p [ i ] [ j ] − v a l [ i ] = d p [ k ] [ j − 1 ] − v a l [ k ] + s u m [ k ] 2

x=sum[k] x = s u m [ k ]y=dp[k][j1]val[k]+sum[k]2 y = d p [ k ] [ j − 1 ] − v a l [ k ] + s u m [ k ] 2,斜率sum[i] s u m [ i ]单调递增,求截距dp[i][j]val[i] d p [ i ] [ j ] − v a l [ i ]最小值

根据j j分别维护凸包即可

C  hdu 4528

D      poj 1260

dp[i] d p [ i ]为满足前i i种珍珠需求最小费用

sum[i]为所需珍珠数量的前缀和

dp方程:

dp[i]=min(dp[j]+(sum[i]sum[j]+10)p[i])(j<i) d p [ i ] = m i n ( d p [ j ] + ( s u m [ i ] − s u m [ j ] + 10 ) ⋅ p [ i ] ) ( j < i )

p[i]sum[j]+dp[i](sum[i]+10)p[i]=dp[j] ⇒ p [ i ] ⋅ s u m [ j ] + d p [ i ] − ( s u m [ i ] + 10 ) ⋅ p [ i ] = d p [ j ]

x=sum[j] x = s u m [ j ]y=dp[j] y = d p [ j ],斜率p[i] p [ i ]单调递增,求截距dp[i](sum[i]+10)p[i] d p [ i ] − ( s u m [ i ] + 10 ) ⋅ p [ i ]最小值

E      hdu 2993

F      hdu 3669

w w为第一关键字,h为第二关键字降序排列

i<j i < j,则一定有w[j]<=w[i] w [ j ] <= w [ i ]

h[j]<=h[i] h [ j ] <= h [ i ]则一定能过,直接去掉

则剩下的序列满足w w单调递减,h单调递增

对于一个后面的人i i,要么重新开一个洞,要么将之前的一个洞加高到h[i]

如果是加高,一定加高最后一个洞,证明如下:

设最后一个洞为w[i]h[i] w [ i ] ⋅ h [ i ]

那么对于任意j<i j < i,都有w[j]>w[i] w [ j ] > w [ i ]h[j]<h[i] h [ j ] < h [ i ]

则加高到h[k] h [ k ]时必有费用w[i](h[k]h[i])<w[j](h[k]h[j]) w [ i ] ⋅ ( h [ k ] − h [ i ] ) < w [ j ] ⋅ ( h [ k ] − h [ j ] ),即i i更优

也就是说,序列中的连续一段必定是开同一个洞的

这就将原问题转化为分组问题:将一个序列分为最多K组,[i,j] [ i , j ]分为一组的代价为w[i]h[j] w [ i ] ⋅ h [ j ],求最小代价

dp[i][j] d p [ i ] [ j ]为前i i个人分j组的最小代价,dp方程:

dp[i][j]=min(dp[k][j1]+w[k+1]h[i])(k<i) d p [ i ] [ j ] = m i n ( d p [ k ] [ j − 1 ] + w [ k + 1 ] ⋅ h [ i ] ) ( k < i )

h[i]w[k+1]dp[i][j]=dp[k][j1] ⇒ h [ i ] ⋅ w [ k + 1 ] − d p [ i ] [ j ] = d p [ k ] [ j − 1 ]

斜率优化即可

G      hdu 3045

先从小到大排序

易知分在一组的都是连续一段

于是得到dp方程:

dp[i]=min(dp[j1]+(sum[i]sum[j1])a[j](ij+1))(Tin,jiT) d p [ i ] = m i n ( d p [ j − 1 ] + ( s u m [ i ] − s u m [ j − 1 ] ) − a [ j ] ⋅ ( i − j + 1 ) ) ( T ≤ i ≤ n , j ≤ i − T )

斜率优化即可

H      hdu 3516

I      poj 1160

dis[i][j] d i s [ i ] [ j ][Vi,Vj] [ V i , V j ]上建一个邮局的最小距离和

画图容易知道,这个邮局应该建在V(i+j)/2 V ( i + j ) / 2的位置最优(其中i+j i + j为奇数时建在V(i+j)/2 V ( i + j ) / 2V(i+j)/2+1 V ( i + j ) / 2 + 1效果相同)

易知dis[i][i]=0 d i s [ i ] [ i ] = 0

dis[i][j1] d i s [ i ] [ j − 1 ]dis[i][j] d i s [ i ] [ j ]时,可视为将原邮局移动到新的位置,并加上Vj V j到新邮局的距离

可以推出移动邮局对原来各村庄影响的和为0(因为比较简单所以不作证明),因此有

dis[i][j]=dis[i][j1]+x[j]x[(i+j)/2] d i s [ i ] [ j ] = d i s [ i ] [ j − 1 ] + x [ j ] − x [ ( i + j ) / 2 ]

可以O(n2) O ( n 2 )预处理出dis d i s

dp[i][j] d p [ i ] [ j ]为前i i个村庄设置j个邮局的最小距离和,dp方程:

dp[i][j]=min(dp[k][j1]+dis[k+1][i])(k<i) d p [ i ] [ j ] = m i n ( d p [ k ] [ j − 1 ] + d i s [ k + 1 ] [ i ] ) ( k < i )

边界条件dp[i][1]=dis[1][i] d p [ i ] [ 1 ] = d i s [ 1 ] [ i ]

时间复杂度O(V2P) O ( V 2 P ),对于本题不优化也可以过

J      poj 1180

dp[i][j] d p [ i ] [ j ]为前i i个任务分j组的最小代价,dp方程:

dp[i][j]=min(dp[k][j1]+(t+sumT[i]sumT[k])(sumF[i]sumF[k]))(k<i) d p [ i ] [ j ] = m i n ( d p [ k ] [ j − 1 ] + ( t + s u m T [ i ] − s u m T [ k ] ) ⋅ ( s u m F [ i ] − s u m F [ k ] ) ) ( k < i )

其中t=s(j1)+sumT[k] t = s ⋅ ( j − 1 ) + s u m T [ k ]

斜率优化后时空复杂度都是O(n2) O ( n 2 ),但本题n=10000 n = 10000,显然过不了

观察到之前用到j j这一维是因为前面的分组数有后效性

于是反过来,设dp[i][i,n] [ i , n ]的任务的最小代价,得到dp方程:

dp[i]=min(dp[j]+(s+sumT[j1]sumT[i1])(sumF[n]sumF[i1]))(i<j) d p [ i ] = m i n ( d p [ j ] + ( s + s u m T [ j − 1 ] − s u m T [ i − 1 ] ) ⋅ ( s u m F [ n ] − s u m F [ i − 1 ] ) ) ( i < j )

斜率优化后时空复杂度O(n) O ( n ),符合要求

K      poj 2841

L

重复题目

J      uva 12594


版权声明:本文为hhz6830975原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。