性能 – 最高效率

最大效率问题

这是N个城市,还有一个流浪者.

他从一个城镇到另一个城镇所需的时间是众所周知的 – Txy(从城镇x到城镇y).

从任何城镇,他都可以去任何其他城镇,所以这是一个完整的图表.

在每个城镇,流浪者想要收集一定数量的钱.

现在还没有足够的时间通过所有城市.

拥有总可用时间T和起点i,问题是找到最佳路线,以便他收集的钱最多.

输入数字范围:

> N介于400和600之间
> Mx(M1,M2,…)介于100和500之间,x介于1和N之间
> Txy介于80和200之间,x和y介于1和N之间
> Txy是最佳时间距离,因此Txy <1. Txz Tzy,对于1和N之间的任何x,y和z.
> T介于3500和5000之间

最佳答案 看似动态:

表示[x] – 从城市x收集的钱.

设dp [x] [t]表示他可以花费时间t并在城市x中完成的最大金额.初始化和更新如下:

>对于起点x0,dp [x0] [0]:= a [x0].对于其他城市x dp [x] [0]:= -1(无效);
>从1到T的每个时间t:
对于每个城市x:
对于每个城市y s.t. edge [y] [x]< = t:
表示p:= t – edge [y] [x];
如果dp [y] [p]> = 0 //可以在时间p到达y
然后dp [x] [t] = max(dp [x] [t],dp [y] [t – edge [x] [y]] a [x])
>在所有dp [x] [t]上返回最大值.

总复杂度为O(T * N ^ 2).

点赞