Algorithm 如何将有限的糖果分配给孩子们?

Algorithm 如何将有限的糖果分配给孩子们?,algorithm,Algorithm,我们想和孩子们分享糖果 假设我们有不同种类的糖果a_1,…,a_m 对于每种类型的糖果,数量为q_j,其中j=1,…,m 有n个孩子,c_1,…,c_n 由于糖果的数量是有限的,每个孩子c|i都会得到一套糖果a|i,其中a|i是a|1、…、a|m和| a|i |>=1的任意组合 目标:给每个孩子分配一个他最喜欢的糖果。如果孩子没有从A_i中挑选任何类型的糖果(即他们从其他类型的糖果中挑选),我们必须给他们一块巧克力。在一定数量的糖果中,我们希望尽量减少给孩子们的巧克力数量 如何在O(mn^2)时

我们想和孩子们分享糖果

假设我们有不同种类的糖果a_1,…,a_m

对于每种类型的糖果,数量为q_j,其中j=1,…,m

有n个孩子,c_1,…,c_n

由于糖果的数量是有限的,每个孩子c|i都会得到一套糖果a|i,其中a|i是a|1、…、a|m和| a|i |>=1的任意组合

目标:给每个孩子分配一个他最喜欢的糖果。如果孩子没有从A_i中挑选任何类型的糖果(即他们从其他类型的糖果中挑选),我们必须给他们一块巧克力。在一定数量的糖果中,我们希望尽量减少给孩子们的巧克力数量


如何在O(mn^2)时间内解决该问题?

任何示例…?您可以将其建模为最大流量问题。您有一个源节点,并且该源节点具有表示糖果类型的节点中的边,边的容量是糖果数量。然后有第二组表示子节点的节点。容量1的边从每个糖果类型定向到每个想要该糖果类型的孩子。然后,每个子节点都有一条进入一个接收节点的边。从源到接收器的最大流量是您可以使用的最大子级数satisfy@Yash没有提供任何例子。@Primusa我就是这么想的。但是看起来candy不会在children组中共享端点,但是孩子们在candy中共享端点,因为几个孩子可以选择相同类型的糖果。这就不是一个二部匹配问题了,我没有提出二部匹配。最大流是一个可以用来解决二部匹配的工具,它可以用来解决这个问题。最大流可以解决很多不同的问题,而不仅仅是二部匹配。