这是一道关于求最大值最小化的问题。
虽然卡了不少时间,但是最后还是完全凭借自己的力量A的呢!yep~
题意:
现在有m本书,然后每本书有不同的页数,然后现在有k名员工,你可以把m本书划分给k名员工,也就是相当于把m划分成k个序列,你的任务是使所有的k个序列中的最大值尽量小。并输出划分情况。
当有多种划分情况时,必须保证第一个人所工作量最少,然后依次第二个。。。
思路:
最大值最小化的问题一般是用二分来做,因为可以就像猜数字一样去控制你所要到达的值!
这道题和书上有些不同。因为这里要保证从前往后工作的人工作量最少,所以我们必须要倒着for人,然后二分猜值,然后对于每个人尽量的往左边延展。
但是还有一个问题,因为这样划分出来的可能并没有分完全,所以我们还要从前往后对于没有获得划分的点进行划分,直到划分到k-1个斜杠为止。
接下来就是判断了,具体的看一下代码应该就能够懂的!
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<algorithm>
using namespace std;
#define maxn 550
typedef long long ll;
ll a[maxn],dian[maxn],vis[maxn],cp[maxn];
ll m,k,tp=0; //m代表共有几本书,k代表分成几份;
bool is_ok(ll d){
memset(vis,0,sizeof(