Pagini recente » Cod sursa (job #2951001) | Cod sursa (job #1507365) | Cod sursa (job #2375551) | Cod sursa (job #3226265) | Cod sursa (job #1000077)
#include <cstdio>
#include <algorithm>
using namespace std;
int n, k, i, MAX, sum, left, right, mid, min_transp, v[16001];
bool ok(int capacity)
{
int transp_nr=1, sum=0;
for(int i=1; i<=n; ++i)
if(sum + v[i] <= capacity) // incap in transp nr
sum += v[i];
else
sum = v[i],
++transp_nr;
return transp_nr<=k;
}
int main()
{
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
scanf("%d %d", &n, &k);
for(i=1; i<=n; ++i)
{
scanf("%d", &v[i]);
sum += v[i];
if(MAX < v[i])
MAX = v[i];
}
left=MAX; right=sum;
while( left <= right )
{
mid = (left+right)/2;
if( ok(mid) ) // se pot transporta toate saltele in maxim k transp pt capacitatea mid => se scade capacitatea
{
right = mid-1;
min_transp = mid;
}
else
left = mid+1;
}
printf("%d\n", min_transp);
return 0;
}