Pagini recente » Cod sursa (job #2058114) | Cod sursa (job #1947780) | Cod sursa (job #2927640) | Cod sursa (job #652073) | Cod sursa (job #2682868)
#include <iostream>
#include<fstream>
using namespace std;
ifstream fin ("transport.in");
ofstream fout ("transport.out");
const int MAXN = 16002;
int n, k, a[MAXN], res = MAXN*MAXN;
int caut(int lo, int hi)
{
if(lo > hi) return -1;
int mid = lo + (hi-lo)/2;
int t = 1, crt = a[0];
if(a[0] > mid) return caut(mid+1, hi);
for(int i = 1; i < n; i++)
{
if(a[i] == mid) return caut(mid+1, hi);
if(crt+a[i] <= mid)
crt += a[i];
else
{
crt = a[i];
t++;
}
}
if(t == k) res = min(res, mid);
if(t <= k) return caut(lo, mid-1);
else if(t > k) return caut(mid+1, hi);
}
int main()
{
fin >> n >> k;
for(int i = 0; i < n; i++)
fin >> a[i];
caut(0, MAXN*MAXN);
fout << res;
return 0;
}