看到数据范围之后就猜是网络流之类的做法,仔细研究了下确实直接费用流就可以做。
首先,这题要求得是最大代价,相当于把代价取相反数的最小代价,之后再取一次相反数。
然后,搞超级源点和超级汇点,分别和(a_{11})和(a_{nn})连边,容量为(k),代价为0,表示可以走(k)次。
再来是拆点,对于每一个格子,将其拆分成入点和出点两个点,再这两个点之间加两条边:
- 一条边容量为1,代价为(-a_{ij}),表示第一次经过这个格子的收益。
- 一条边容量为INF,代价为0,表示后续可以无限经过,但是没有收益。
最后,每个格子向右和向下连边,容量为INF,代价为0,表示可以无限次转移,但是没有收益。