Pagini recente » Borderou de evaluare (job #2053886) | Cod sursa (job #25270) | Cod sursa (job #622075) | Cod sursa (job #2629782) | Cod sursa (job #2656370)
#include <fstream>
using namespace std;
int dr, v[16005], st, n, k;
ifstream cin("transport.in");
ofstream cout("transport.out");
bool ok(int c)
{
int i, tr, sc;
sc = tr = 0;
for( i = 1; i <= n; i ++)
{
if(v[i] > c)
{
return 0;
}
if(sc + v[i] <= c)
{
sc = sc + v[i];
}
else
{
tr ++;
sc = v[i];
}
}
if(sc > 0)
{
tr++;
}
return tr <= k;
}
int bs_left(int n, int dr)
{
int med, last = -1;
while (st <= dr)
{
med = (st + dr) / 2;
if(ok(med))
{
last = med;
dr = med - 1;
}
else
st = med + 1;
}
return last;
}
int main()
{
int sum = 0;
cin >> n >> k;
for(int i = 0; i < n; i ++)
{
cin >> v[i];
sum = sum + v[i];
}
cout << bs_left(1, sum);
return 0;
}