Pagini recente » Cod sursa (job #804508) | Cod sursa (job #1631914) | Cod sursa (job #2768386) | Cod sursa (job #3267007) | Cod sursa (job #1026353)
#include <fstream>
using namespace std;
ifstream is("transport.in");
ofstream os("transport.out");
int n, k;
int c[16001];
int sumat;
int st, dr;
long long asd;
void SOLVE();
bool VERIF();
int main()
{
is >> n >> k;
for ( int i = 1; i <= n; ++i )
{
is >> c[i];
sumat += c[i];
st = max(st, c[i]);
}
dr = sumat;
SOLVE();
os << st;
is.close();
os.close();
return 0;
}
void SOLVE()
{
while ( st <= dr )
{
asd = ( st + dr ) / 2;
if ( VERIF() )
dr = asd - 1;
else
st = asd + 1;
}
}
bool VERIF()
{
int suma = 0, nrt = 1;
for ( int i = 1; i <= n; ++i )
{
if ( suma + c[i] <= asd )
suma += c[i];
else
{
suma = c[i];
++nrt;
}
if ( nrt > k )
return false;
}
if ( suma ) ++nrt;
return true;
}