动态规划或图算法,一个不错的问题

A Dynamic Programming or Graph Algorithm, a Nice Questions

代理在 n 生产者和 m 消费者之间工作。今年第 i 个生产者,生产 s_i 个糖果,第 j 个消费者消耗 b_j 个糖果。对于销售的每一颗糖果,代理商都会获得 1 美元的回报。对于某些问题,定义了一个严格的规则,即生产者应向任何距离不大于100 KM(公里)的生产者销售糖果。如果我们有所有生产者-消费者对的列表,它们之间的距离小于 100 KM,以下哪个算法是寻找最大收益的最佳选择? (假设 s_ib_j 可能变得非常大)。

1) Maximal Matching

2) Dynamic Programming

3) Maximum Flow 

4) 1 , 3

这是 2013 年 DS 课程期末考试的最后一道题。任何提示或想法?

根据我的理解,问题可以作为 Maximum Bipartite Matching 来解决,但是建模要求图形与原始输入相比相对较大;对于每个可行的边缘 (s_i,b_j) 为生产者分区引入 s_i 个节点,为消费者分区引入 b_j 个节点,并将每个生产者节点连接到它们的每个消费者节点。

然而,问题可以在二分图上建模为 Maximum Flow Problem;每个可行边 (s_i,b_j) 上的流量受到来自下方的 0 和来自上方的 min{s_i,b_j} 的约束,因为流量必须是非负的,但可能既不超过生产者的能力,也不超过消费者的能力。

关于通过 Dynamic Prgramming 的解决方案,请考虑以下最大二分匹配的递归关系草图。令 nm 分别表示第一个和第二个分区中的节点数。在第一个分区修复一个节点aa 不匹配或与其邻居之一匹配;在任何一种情况下,都会评估每种可能性,递归地评估分区分别具有 n-1mn-1m-1 节点的实例;这些选择中最好的被采纳。

简而言之,显然所有提出的方法都产生了有效的解决方案;然而,建模为网络流似乎是最自然的。