Pagini recente » Cod sursa (job #423939) | Cod sursa (job #1193558) | Cod sursa (job #2816850) | Cod sursa (job #1425841) | Cod sursa (job #1522676)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in ("transport.in");
ofstream out ("transport.out");
int N,K;
int V[16000];
int M;
int MAX;
int Verificat(int capmax)
{
int drumuri = K;
int capacitateMax = capmax;
for(int i = 0; i < N; i++)
if(capacitateMax >= V[i])
capacitateMax -= V[i];
else
{
drumuri--;
capacitateMax = capmax - V[i];
}
return (drumuri > 0);
}
int caut_bin (int st, int dr)
{
//cout<<st<<' '<<dr<<' '<<M<<'\n';
if (dr-1<=st)
{
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],MAX=V[i];
}
//cout<<M<<'\n';
M=caut_bin(M,N*M);
}
void Write()
{
out<<M;
}
int main()
{
Read();
Solve();
Write();
return 0;
}