Pagini recente » Cod sursa (job #3137500) | Cod sursa (job #47161) | Cod sursa (job #3211286) | Cod sursa (job #2690499) | Cod sursa (job #2418604)
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
const int N = 16000*16000+10;
int n,k,greutate_totala,gr_max,a[16001],st=1,dr=N,mij,i;
bool check_capacity(int c)
{
int x=0,transporturi=0;
for (int i=1; i<=n; ++i)
{
x+=a[i];
if (x>c)
transporturi++,x=a[i];
else if (x==c)
transporturi++,x=0;
}
if (x)
transporturi++;
if (transporturi<=k)
return true;
return false;
}
int main()
{
in>>n>>k;
for (i=1; i<=n; ++i)
{
in>>a[i];
greutate_totala+=a[i];
gr_max=max(gr_max,a[i]);
}
if (k==1)
out<<greutate_totala<<"\n";
else if (k>=n)
out<<gr_max<<"\n";
else
{
while (st<dr)
{
mij=(st+dr)/2;
if (check_capacity(mij))
dr=mij;
else
st=mij+1;
}
out<<dr<<"\n";
}
}