Pagini recente » Cod sursa (job #131196) | Cod sursa (job #320008) | Cod sursa (job #696518) | Cod sursa (job #765587) | Cod sursa (job #2332530)
#include <fstream>
#define max(a,b) a > b ? a : b
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n,k,s[16001],suma,maximao = -1,raspuns = 0;
void citire()
{
fin>>n>>k;
int i;
for(i = 1; i <= n; ++i)
{
fin>>s[i];
suma += s[i];
maximao = max(maximao, s[i]);
}
}
void rezolvare()
{
int st = maximao, dr = suma, i, drum, cap,mijl;
while(st <= dr)
{
mijl = (st + dr) / 2;
drum = cap = 0;
for(i = 1; i <= n; ++i)
if(cap + s[i] <= mijl && s[i] <= mijl)
cap += s[i];
else
{
drum++;
cap = s[i];
}
if(cap <= mijl)
drum++;
if(drum > k)
st = mijl + 1;
else
dr = mijl - 1;
}
fout<<mijl;
}
int main()
{ citire();
rezolvare();
return 0;
}