Pagini recente » Cod sursa (job #303224) | Cod sursa (job #469548) | Cod sursa (job #3204843) | Cod sursa (job #1297811) | Cod sursa (job #781982)
Cod sursa(job #781982)
#include <cstdio>
const unsigned int MAX_SIZE(16000);
unsigned int volume [MAX_SIZE];
unsigned int n, k;
inline bool check (unsigned int try_volume)
{
unsigned int iterator(0), sum, transports(0);
while (iterator < n)
{
sum = 0;
while (iterator < n && sum + volume[iterator] <= try_volume)
{
sum += volume[iterator];
++iterator;
}
if (!sum)
return false;
++transports;
}
if (transports <= k)
return true;
return false;
}
inline unsigned int search (unsigned int left, unsigned int right)
{
unsigned int middle;
while (left < right)
{
middle = (left + right) >> 1;
if (check(middle))
right = middle - 1;
else
left = middle + 1;
}
return left;
}
int main (void)
{
std::freopen("transport.in","r",stdin);
std::freopen("transport.out","w",stdout);
std::scanf("%u %u",&n,&k);
unsigned int *iterator(volume), *end(volume + n), total_volume(0);
do
{
std::scanf("%u",iterator);
total_volume += *iterator;
++iterator;
}
while (iterator < end);
std::fclose(stdin);
unsigned int min_charge(search(0,total_volume));
std::printf("%u\n",min_charge);
std::fclose(stdout);
return 0;
}