挖矿,DP,扩展欧几里德
- 有个星球,从到编号,yqy最初在号星球
- 有处矿体,第出矿体有单位原矿,在编号为的星球上
- 飞船每次只能从号星球移动到或号星球,每到一个星球yqy会采走该星球上所有的原矿
- 求yqy最多能采走多少原矿
- 注意:
- yqy不必最终到达号星球
- 对于的数据,
题解
设表示走到第个星球时最多可以得到的原矿数量,用表示第个星球上有的原矿数量,易得:
然而对于的数据,很大,这样会超时超内存,所以我们需要做一些优化。
首先扯一会Exgcd: 对于一个方程,此方程有整数解的充要条件是,对于本题中每一个想要到达的距离,可以写成的形式,由于所以为任意正整数时,该方程都有整数解。
然而,本题只有当所求都为正整数时,才称对应为可到达的。
经过枚举,我们发现,当时,对应的都为整数,也就是说,如果某两个有矿物的星球之间距离大于等于,我们可以将它们之间的距离压缩成,这样的时间复杂度和空间复杂度就达到了,极限数据,轻松过
代码
|
Author: Sulfur6
Origin: http://sulfur6.github.io
Link: http://sulfur6.github.io/mining-dp/
本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可