题目描述
有M本书(编号为1,2,…,M),每本书都有一个页数(分别是P1,P2,…,PM)。想将每本都复制一份。将这M本书分给K个抄写员(1<=K<=M<=500), 每本书只能分配给一个抄写员进行复制。每个抄写员至少被分配到一本书,而且被分配到的书必须是连续顺序的。复制工作是同时开始进行的,并且每个抄写员复制 一页书的速度都是一样的。所以,复制完所有书稿所需时间取决于分配得到最多工作的那个抄写员的复制时间。试找一个最优分配方案,使分配给每一个抄写员的页 数的最大值尽可能小。(假设复制一页需要1分钟)
输入
第一行两个整数M、K;(K<=M<=100)
第二行M个整数,第i个整数表示第i本书的页数。
输出
共1行,复制完所有书最少用的时间(分钟)
样例输入 Copy
9 3
1 2 3 4 5 6 7 8 9
样例输出 Copy
17
有点复杂的问题,看完头晕了
说是动归,其实是一道氵二分
#include<bits/stdc++.h>
using namespace std;
int n,m,a[111];
bool check(int mid)
{
int t=1,s=0;
for(int i=n;i>=1;i--)
{
if(s+a[i]>mid)
{
t++;
s=a[i];
}
else
s+=a[i];
}
return t<=m;
}
int main()
{
scanf("%d%d",&n,&m);
int l=1,r=0,mid;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
r+=a[i];
}
while(l<=r)
{
mid=(l+r)/2;
if(check(mid))r=mid-1;
else l=mid+1;
}
printf("%d",r+1);
return 0;
}