Pagini recente » Borderou de evaluare (job #2010250) | Borderou de evaluare (job #2039062) | Borderou de evaluare (job #2026054) | Borderou de evaluare (job #2018312) | Cod sursa (job #3231785)
#include<fstream>
using namespace std;
const int NMAX = 1e3;
int v[16*NMAX+1], N, K;
bool verifica(int m)
{
int nrd = 1, 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()
{
ifstream fin("transport.in");
ofstream fout("transport.out");
fin >> N >> K;
for(int i = 1; i <= N; i++)
fin >> v[i];
fout << cb();
fin.close();
fout.close();
return 0;
}