P3080 The Cow Run
The Cow Run:剩余对象共同产生的移动代价
问题
P3080 The Cow Run G/S - 洛谷
奶牛分布在数轴上,起点为 。每头尚未被找到的奶牛会随时间持续产生代价,求找完所有奶牛的最小总代价。
数据规模:。
这题不能把移动距离简单累加,因为同样的一段路,在早期经过时会让更多奶牛等待,代价更大。
于是我们把所有奶牛的位置与起点 一起排序,此时我们会发现,已经被找到的奶牛就形成了一个包含 的连续区间 。
然后下一步只可能去找 或者 ,所以我们可以采用区间 DP 的定义,然后发现当前区间最后还需要包括结束站在左端点还是右端点: 表示处理完 ,停在左/右端时的最小代价。
接着考虑转移就好了,由于每次移动会导致剩下来的 头奶牛都多等待 这段移动距离,所以本次移动的代价为 。
注:这里的 cnt = N - ( (len - 1) - 1 ) = n - 1 - len + 2 = n - len + 1。因为当前 是从 转移过来的,而当前这头牛也得算进去,所以已经找到的牛的数量是 ,由于数组额外加入了一个 点,所以 。
▶
P3080
1 | |
记录
这题保留为 C 类记录。它的迁移点是:当总成本是所有对象等待时间之和时,可以按每段移动对“当前仍未完成的对象”统一贡献,得到“距离乘剩余数量”的区间 DP。
P3080 The Cow Run
http://miqiu.space/posts/a3080001/