Pagini recente » Cod sursa (job #1587796) | Cod sursa (job #1079341) | Cod sursa (job #1930325) | Cod sursa (job #1828032) | Cod sursa (job #2620883)
#include <bits/stdc++.h>
#define N 16001
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n, k;
int g[N];
int st, dr;
int capacitate = -1;
void citeste()
{
fin>>n>>k;
for(int i = 0; i < n; ++i)
{
fin>>g[i];
dr += g[i];
st = (st < g[i]) ? g[i] : st;
}
}
int verifica(int val)
{
int nrTransp, curent;
int i;
for(i = curent = 0, nrTransp = 1; i < n; ++i)
{
if(curent + g[i] > val)
{
curent = g[i];
++nrTransp;
}
else
{
curent += g[i];
}
if(nrTransp > k)
return 0;
}
return 1;
}
void cautBin()
{
int mijloc;
dr += st;
while(st <= dr)
{
mijloc = (st + dr)/2;
if(verifica(mijloc))
{
capacitate = mijloc;
dr = mijloc-1;
}
else
{
st = mijloc+1;
}
}
}
int main()
{
citeste();
cautBin();
fout<<capacitate;
return 0;
}