给定n个元素之间的成本,其中cost [i] [j]表示元素i和j之间的成本,我们需要将n个元素划分为k个非空组,以便如果2个元素属于同一组,则线对之间的成本变为0。给定除法,令M为不属于同一组的2对线的最小成本。我需要找到最大可能的M。(没有给出除法运算,我们需要找到最佳除法然后找到最大可能的M)
我想到对所有cost [i] [j]进行排序,然后对其进行二进制搜索。假设我们在排序数组中的位置x处,成本为M,它表示(i,j)之间的边。我们假定它是最大可能的M。因此,我们知道ith元素和jth元素必须位于不同的组中。然后我们从第ith个元素开始bfs并添加所有成本小于当前M的相邻元素。这将在当前组中。我们将继续bfsing,直到用尽了该组中的所有元素。然后,我们移至下一组,并从第j个元素再次进行bfs。如果我们遇到的元素已经在上一个组中,但是与当前组中的元素相比花费少于M,我们将返回false或尝试将这两个组合并。这是我不确定的部分
一个例子是,如果n = 3,k = 2且cost [1] [2] = 17,cost [2] [3] = 15,cost [1] [3] = 16
我们可以将元素1放在组1中,将元素2放在组2和3中。在这种情况下,最大M为min(cost [1] [2],cost [1] [3])= 16 >
这是可以做到的最好的
答案 0 :(得分:0)
如果在一个组中没有约束最小元素数或该组具有相似数量的元素,则最好的方法是将k-1
元素以外的所有元素归入一个组,将所有其他组包含一个元素要找到这些创建k-1
组的k-1
元素,请按降序排序并获取第一个k-1
出现的元素。