Pagini recente » Cod sursa (job #1425394) | Cod sursa (job #3259756) | Cod sursa (job #2873467) | Cod sursa (job #968662) | Cod sursa (job #2509661)
#include <bits/stdc++.h>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int n,k;
int maxim = -INFINITY,s,maximt;
int a[16000];
void Citire()
{
f>>n>>k;
for(int i=1;i<=n;++i)
{
f>>a[i];
if(a[i] > maxim) maxim = a[i];
s += a[i];
}
f.close();
}
void Rezolvare()
{
int st = maxim; //minimul posibil este volumul maxim
int dr = s; //maximul posibil este suma volumelor
while(st<=dr)
{
int mij = (st+dr)/2;
int nr = 1;
s = 0;
for(int i=1;i<=n;++i)
{
if(s + a[i] <= mij) s += a[i];
else
{
++nr;
s = a[i];
}
}
if(nr > k)
st = mij + 1;
else
{
maximt = mij;
dr = mij - 1;
}
}
}
void Afisare()
{
g<<maximt;
g.close();
}
int main()
{
Citire();
Rezolvare();
Afisare();
return 0;
}