首先山脚的那个一定得建。
因为只能往山脚运,所以考虑从后往前dp
dp[i]:在i建一个仓库,后缀最小的值。
所以
dp[i]=c[i]+minj=i+1n(dp[j]+∑k=i+1j−1p[k]×(x[j]−x[k]) )
于是30pts。
观察这个式子,
dp[i]=c[i]+minj=i+1n(dp[j]+∑k=i+1j−1p[k]×(x[j]−x[k]) )
=c[i]+minj=i+1n(dp[j]+∑k=i+1j−1p[k]×x[j]−p[k]∗x[k] )
而p[k]∗x[k]可以预处理。
设a[i]=p[i]∗x[i]的前缀和,b[i]是p的前缀和。
所以
dp[i]=c[i]+minj=i+1n(dp[j]+(b[j−1]−b[i])×x[j]−a[j−1]+a[i])
于是50pts。
dp[i]=(dp[j]+(b[j−1]−b[i])×x[j]−a[j−1]+a[i])+c[i]
=dp[j]+b[j−1]∗x[j]−b[i]∗x[j]−a[j−1]+a[i]+c[i]
用另一种阳间一点的方法分析吧。
若j的决策优于k
那么
dp[j]+b[j−1]∗x[j]−b[i]∗x[j]−a[j−1]+a[i]+c[i]<dp[k]+b[k−1]∗x[j]−b[i]∗x[k]−a[k−1]+a[i]+c[i]
dp[j]+b[j−1]∗x[j]−b[i]∗x[j]−a[j−1]<dp[k]+b[k−1]∗x[j]−b[i]∗x[k]−a[k−1]
(dp[j]−a[j−1])−(dp[k]−a[k−1])+b[j−1]∗x[j]−b[i]∗x[j]<b[k−1]∗x[k]−b[i]∗x[k]
(dp[j]−a[j−1])−(dp[k]−a[k−1])+b[j−1]∗x[j]−b[k−1]∗x[k]<b[i]∗x[j]−b[i]∗x[k]
(dp[j]−a[j−1])−(dp[k]−a[k−1])+b[j−1]∗x[j]−b[k−1]∗x[k]<b[i]∗(x[j]−x[k])
x[j]−x[k](dp[j]−a[j−1]+b[j−1]∗x[j])−(dp[k]−a[k−1]+b[k−1]∗x[k])<b[i]
设X(i)=x[i],Y(i)=dp[i]−a[i−1]+b[i−1]∗x[i]
于是
X(j)−X(k)Y(j)−Y(k)<b[i]
斜率优化。