Pagini recente » Cod sursa (job #273560) | Cod sursa (job #716764) | Cod sursa (job #2458295) | Istoria paginii runda/simulare | Cod sursa (job #647542)
Cod sursa(job #647542)
#include <stdio.h>
int N, K;
int sizes[16001];
int count(int truck_size)
{
int current_size = 0;
int drives = 0;
for(int i = 0; i < N; i++)
{
if(current_size + sizes[i] <= truck_size)
{
current_size += sizes[i];
}
else
{
drives++;
current_size = sizes[i];
}
}
drives++;
return drives;
}
int binary_search(int start, int end)
{
int sol = 0;
while(start < end)
{
int mid = (start+end)/2;
int nr_drives = count(mid);
//printf("Number of drives for Size = %d is %d\n", mid, nr_drives);
if(nr_drives > K)
{
start = mid + 1;
}
else
{
sol = mid;
end = mid;
}
}
return sol;
}
int main()
{
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
scanf("%d %d", &N, &K);
for(int i = 0; i < N; i++)
{
scanf("%d", &sizes[i]);
}
int max = 0, sum = 0;
for(int i = 0; i < N; i++)
{
sum += sizes[i];
if(max < sizes[i])
{
max = sizes[i];
}
}
printf("%d\n", binary_search(max, sum));
return 0;
}