回 帖 发 新 帖 刷新版面

主题:2

〖题目描述〗
假设有M本书(编号为1,2,…M),想将每本复制一份,M本书的页数可能不同(分别是P1,P2,…PM)。任务是将这M本书分给K个抄写员(K〈=M〉,每本书只能分配给一个抄写员进行复制,而每个抄写员所分配到的书必须是连续顺序的。
意思是说,存在一个连续升序数列 0 = bo < b1 < b2 < … < bk-1 < bk = m,这样,第I号抄写员得到的书稿是从bi-1+1到第bi本书。复制工作是同时开始进行的,并且每个抄写员复制的速度都是一样的。所以,复制完所有书稿所需时间取决于分配得到最多工作的那个抄写员的复制时间。试找一个最优分配方案,使分配给每一个抄写员的页数的最大值尽可能小(如存在多个最优方案,只输出其中一种)。
(GDOI''99 Books). 



〖输入格式〗
第一行两个数m,k:表示书本数目与人数;第二行m个由空格分隔的整数,m本书每本的页数.



〖输出格式〗
共k行。每行两个整数:第I行表示第I抄写员抄的书本编号起止。



〖输入输出样例〗



 
 
 
输入样例                    输出样例 
9 3                           1 5
1 2 3 4 5 6 7 8 9             6 7
                              8 9

回复列表 (共1个回复)

沙发

这就是简单的加线划分问题嘛
给出我的思路:
从第一个数后面开始划线a1,设a1产生的划分区间页数总和为s1
第2个数后划线a2
依次划分,直至划分完毕,存储本次划分并记录下本次生成的最大页数smax
然后从第2个数后面开始划a1,重复上述步骤生成新划分,如果最大页数超过smax就舍弃当前解,否则记录下当前解,更新smax
以后每次都类似划分,发现最大页数超过smax就舍弃当前计算的解
直至穷举结束
也许会比较慢,但是不会遗漏,不会出现局部最优解

我来回复

您尚未登录,请登录后再回复。点此登录或注册