Pagini recente » Cod sursa (job #1187347) | Cod sursa (job #2625883)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int saltele[16000];
int n, k;
int check(int si)
{
int i, transport, drumuri;
transport = 0;
drumuri = 1;
for(i = 0; i < n && drumuri <= k; i++)
{
transport += saltele[i];
if(transport > si)
{
transport = saltele[i];
drumuri++;
}
}
return !(drumuri > k);
}
int main()
{
int i, max_size, min_size;
int left, right, mid, s;
in >> n >> k >> saltele[0];
max_size = min_size = saltele[0];
for(i = 1; i < n; i++)
{
in >> saltele[i];
if(saltele[i] > min_size)
min_size = saltele[i];
max_size += saltele[i];
}
left = min_size;
right = max_size;
s = 0;
while(left <= right)
{
mid = (left + right) / 2;
if(check(mid))
{
s = mid;
right = mid - 1;
}
else
left = mid + 1;
}
out << s;
return 0;
}