A
裸题,不写了
B hdu 2829
设 dp[i][j] d p [ i ] [ j ] 为前 i i 个点分段的最小值
设 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 ] 为前缀和
dp方程:
x=sum[k] x = s u m [ k ] , y=dp[k][j−1]−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 分别维护凸包即可
D poj 1260
设 dp[i] d p [ i ] 为满足前 i i 种珍珠需求最小费用
设为所需珍珠数量的前缀和
dp方程:
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 为第一关键字,为第二关键字降序排列
设 i<j i < j ,则一定有 w[j]<=w[i] w [ j ] <= w [ i ]
若 h[j]<=h[i] h [ j ] <= h [ i ] 则一定能过,直接去掉
则剩下的序列满足 w w 单调递减,单调递增
对于一个后面的人 i 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 更优
也就是说,序列中的连续一段必定是开同一个洞的
这就将原问题转化为分组问题:将一个序列分为最多组, [i,j] [ i , j ] 分为一组的代价为 w[i]⋅h[j] w [ i ] ⋅ h [ j ] ,求最小代价
设 dp[i][j] d p [ i ] [ j ] 为前 i i 个人分组的最小代价,dp方程:
斜率优化即可
G hdu 3045
先从小到大排序
易知分在一组的都是连续一段
于是得到dp方程:
斜率优化即可
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 ) / 2 和 V(i+j)/2+1 V ( i + j ) / 2 + 1 效果相同)
易知 dis[i][i]=0 d i s [ i ] [ i ] = 0
从 dis[i][j−1] d i s [ i ] [ j − 1 ] 推 dis[i][j] d i s [ i ] [ j ] 时,可视为将原邮局移动到新的位置,并加上 Vj V j 到新邮局的距离
可以推出移动邮局对原来各村庄影响的和为0(因为比较简单所以不作证明),因此有
可以 O(n2) O ( n 2 ) 预处理出 dis d i s
设 dp[i][j] d p [ i ] [ j ] 为前 i i 个村庄设置个邮局的最小距离和,dp方程:
边界条件 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 个任务分组的最小代价,dp方程:
其中 t=s⋅(j−1)+sumT[k] t = s ⋅ ( j − 1 ) + s u m T [ k ]
斜率优化后时空复杂度都是 O(n2) O ( n 2 ) ,但本题 n=10000 n = 10000 ,显然过不了
观察到之前用到 j j 这一维是因为前面的分组数有后效性
于是反过来,设为 [i,n] [ i , n ] 的任务的最小代价,得到dp方程:
斜率优化后时空复杂度 O(n) O ( n ) ,符合要求
K poj 2841
L
重复题目
J uva 12594