Pagini recente » Cod sursa (job #2413469) | Cod sursa (job #529468) | Cod sursa (job #2208974) | Cod sursa (job #1488087) | Cod sursa (job #1522668)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in ("transport.in");
ofstream out ("transport.out");
int N,K;
int V[16000];
int M;
int Verificat(int capmax)
{
int drumuri = 0;
//int capacitateMax = capmax;
int load=0;
for (int i=0;i<N;i++)
{
load+=V[i];
if (load==capmax)
load=0,drumuri++;
else if (load>capmax)
load=0,drumuri++,i--;
}
return (drumuri<=K);
}
int caut_bin (int st, int dr)
{
cout<<st<<' '<<dr<<' '<<M<<'\n';
if (st+1>=dr)
{
if (Verificat(dr))
return dr;
return st;
}
int mid=(st+dr)/2;
if (Verificat(mid))
return caut_bin(st, mid);
return caut_bin(mid,dr);
}
void Read()
{
in>>N>>K;
for (int i=0;i<N;i++)
{
in>>V[i];
}
}
void Solve()
{
M=-2000000;
for (int i=0;i<N;i++)
{
if (M<V[i])
M=V[i];
}
//cout<<M<<'\n';
M=caut_bin(M,N*N);
}
void Write()
{
out<<M;
}
int main()
{
Read();
Solve();
Write();
//cout<<Verificat(8);
return 0;
}