0
点赞
收藏
分享

微信扫一扫

lintcode:437 书籍复印

高子歌 2022-05-04 阅读 65

题目来源

  • lintcode

题目描述

在这里插入图片描述
在这里插入图片描述

题目解析

  • 如果一个抄写员抄写第i本到第j本书,则需要时间A[i] + A[i+1].+ … + A[j]
  • 最后完成时间取决于耗时最长的那个抄写员
  • 需要找到一种分段方式,分成不超过K段,使得所有段的数字之和的最大值最小

在这里插入图片描述

多态

(1)确定状态

  • 最后一步:
    • 最优策略中最后一个抄写员(第k个)抄写的部分是第j到第N-1本书,则需要时间A[j]+…A[N-1]
    • 则需要知道前K-1个人最少需要多少时间抄写完前j本书(第0-j-1本书)
  • 子问题:
    • 要知道K个人最短需要多少时间抄完前N本书
    • 需要先知道k-1个人最短需要多少时间抄完前j本书
  • 状态
    • 设置f[k][i]为k个抄写员最少需要多少时间抄写完前i本书

(2)转移方程

在这里插入图片描述
(3)初始条件和边界情况

  • 初始条件:
    • f[0][i] = 正无穷,因为0个抄写员只能抄0本书
    • f[i][0] = 0,i个抄写员需要0时间抄0本书

(4)计算顺序

  • 从左到右,从上到下
  • 返回f[k][n]

在这里插入图片描述

举报

相关推荐

0 条评论