Pagini recente » Borderou de evaluare (job #84911) | Cod sursa (job #3231781)
#include<fstream>
using namespace std;
const int NMAX = 1e3;
int v[16*NMAX+1], N, K;
ifstream fin("transport.in");
ofstream fout("transport.out");
bool verifica(int m)
{
int nrd = 0, s = 0;
for (int i = 1; i<= N; i++)
{
if(v[i] > m)
return false;
if(s+v[i] <= m)
s += v[i];
else
{
nrd++;
if(nrd > K)
return false;
s = v[i];
}
}
return true;
}
int cb()
{
int st = 1, dr = 16000*16000, rasp;
while(st <= dr)
{
int m = (st+dr)/2;
if(verifica(m))
rasp = m, dr = m-1;
else
st = m+1;
}
return rasp;
}
int main()
{
fin >> N >> K;
for(int i = 1; i <= N; i++)
fin >> v[i];
fout << cb() << "\n";
fin.close();
fout.close();
return 0;
}