如何解决在M天内阅读具有N章的书籍的最佳方式
您可以使用动态编程。
-
平均值等于
totalNumberOfPages / numberOfDays
并且不取决于我们阅读本书的方式。 -
状态为(我们完成的章节数量,已经使用的天数)。状态的值是到目前为止的绝对差的最小和。
-
基本情况是
f(0, 0) = 0
。 -
转换如下:
-
假设当前状态为
(chapters, days)
。 -
我们可以遍历第二天将要阅读的章节数(我将其称为
add
)并进行以下转换:f(chapters + add, days + 1) = min(f(chapters + add, days + 1), f(chapters, days) + abs(average - the number of pages in chapter + 1 ... chapter + add chapters).
-
-
答案是
f(totalNumberOfChapters, totalNumberOfDays)
。
该解决方案基于以下假设:我们的目标是“将每天阅读的总页数的绝对差异的总和与一个人每天应该理想地阅读的平均页数相减”。
但是,如果问题陈述没有说出最佳标准是什么,我建议尽量减少一天内的最大读取页数(我认为,目标不是连续读取过多会更有意义)。在这种情况下,有一个更简单有效的解决方案:我们可以对答案进行二进制搜索,然后使用贪心算法来检查固定的候选对象是否可行。
解决方法
我遇到了一个访谈问题:给定一本书有N章(每章当然有不同的页数),在M天内完成一整本书的最佳方法是什么?同一天。
例:
Chapters[] = {7,5,3,9,10}
Days = 4
一个应该读为:
Chapter1 on Day1
,Chapters2 and Chapter3 on Day2
, Chapter4 on
Day3
和Chapter5 on Day4
。
我了解该想法应该是将一天中应该“理想地”阅读的平均页面数与阅读的总页面数的绝对差之和减到最小。但是,我无法将此想法转换为数据结构和算法。任何其他想法或意见表示赞赏。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。