使用动态编程解决最小分配

时间:2017-08-13 06:50:30

标签: algorithm data-structures dynamic-programming

可以使用DP解决"allocate minimum no of pages" problem吗?

  

你有N本书。每本 th 书都有P i 页数。   你必须为M个学生分配书籍。可以有很多方法或排列方式。在每个排列中,M个学生中的一个将被分配最大页数。在所有这些排列中,任务是找到特定的排列,其中分配给学生的最大页数最小于所有其他排列中的页面,并打印该最小值。

     

每本书将分配给一名学生。每个学生必须至少分配一本书。

我知道它将是未经优化的,二进制搜索解决方案更有效率,但是对于我的理解可以解决这个问题,如果是的话,将会有什么记忆步骤或临时数组以及如何以自下而上的方式解决问题以解决问题使用DP?

1 个答案:

答案 0 :(得分:1)

是的,可以使用动态编程来解决它。

考虑到我们已在f(b, s)名学生中分发了第一本b本书,s是学生必须阅读的最大网页数的最小值。

基本案例是f(0, 0) = 0:没有学生,没有书籍,没有页面。

转换看起来如此:如果当前状态为(b, s),我们可以转到新状态(new_b, s + 1)(其中new_b > b)并将其费用设置为max(f(b, s), sum_of_pages[b + 1, new_b]) 。这意味着我们会将[b + 1, new_b]范围内的所有图书分配给下一位学生。

答案是f(N, M)(这意味着我们已经处理了所有图书并将其分配给所有学生)。

这个解决方案背后的直觉如下:如果我们已经分配了第一本b本书,那么对我们来说唯一重要的是已经分配了一些书籍的学生人数和目前的答案。这项任务的确切方式并不重要。