Algorithm 该算法是否适用于2016年ICPC世界总决赛任务L?

Algorithm 该算法是否适用于2016年ICPC世界总决赛任务L?,algorithm,Algorithm,我被要求为2016年ICPC世界总决赛问题L制定一个解决方案,作为家庭作业 我成功地创建并运行了一个解决问题的程序。然而,我很好奇是否有更好的算法来解决这个问题 问题L如下: 一组n硬盘驱动器需要重新格式化。当驱动器i重新格式化时,其容量将从a_iGB变为b_iGB。所有硬盘驱动器最初都已满到边缘。为了存储硬盘x中的数据 正在重新格式化,您可以购买额外的硬盘驱动器。 任何重新格式化的驱动器都可以用来存储更多数据 (假设它有能力这样做)。来自硬盘驱动器的数据x 可以在其他硬盘驱动器之间拆分。编写一

我被要求为2016年ICPC世界总决赛问题L制定一个解决方案,作为家庭作业

我成功地创建并运行了一个解决问题的程序。然而,我很好奇是否有更好的算法来解决这个问题

问题L如下:

一组
n
硬盘驱动器需要重新格式化。当驱动器
i
重新格式化时,其容量将从
a_i
GB变为
b_i
GB。所有硬盘驱动器最初都已满到边缘。为了存储硬盘
x
中的数据 正在重新格式化,您可以购买额外的硬盘驱动器。 任何重新格式化的驱动器都可以用来存储更多数据 (假设它有能力这样做)。来自硬盘驱动器的数据
x
可以在其他硬盘驱动器之间拆分。编写一个估算 重新格式化所需的最小额外空间量 不丢失数据的硬盘驱动器

我目前使用的算法与中的相同

该算法遵循以下步骤:

  • 将重新格式化后失去容量的硬盘驱动器与重新格式化后保持或增加容量的硬盘驱动器分开

  • 按硬盘驱动器的初始容量对新列表进行排序。丢失容量的(称为“收缩列表”)按从大到小排序,其他(称为“增长列表”)按从小到大排序

  • 从grow列表的第一个成员开始,检查其起始容量并将该值分配给swap(成功交换数据所需的累积空间)

  • 重新格式化硬盘驱动器后,将重新格式化第一个硬盘驱动器所获得的容量分配给“额外”(第一个值始终至少为0)

  • 将要重新格式化的下一个硬盘驱动器(硬盘驱动器
    x
    )的初始容量与swap+extra的值进行比较。如果swap+extra至少等于硬盘驱动器
    x
    的初始值,则可以重新格式化硬盘驱动器

  • 如果swap+extra的值小于硬盘驱动器
    x
    的初始容量,请增加swap的值,直到您有足够的容量进行交换,然后重新格式化驱动器
    x

  • 将硬盘驱动器
    x
    的最终容量和初始容量之间的差异添加到额外容量中,即使它是负值

  • 返回到步骤5,直到重新格式化成长列表的所有成员

  • 一旦增长列表的所有成员都已重新格式化,请返回到步骤5,但现在,请改用收缩列表

  • 是否有更好/更快的方法解决此问题?

    有一份所有问题的判断数据(输入和输出)列表,以及2017-2018年的解决方案(对您2016年的问题没有帮助)。如果您可以在最大的输入上运行您的解决方案,并在时间限制内生成正确的输出,那么我认为没有比这更好的了(在竞赛范围内,例如,没有并行性等)。