Pagini recente » Cod sursa (job #125696) | Cod sursa (job #3260383) | Cod sursa (job #305677) | Cod sursa (job #216566) | Cod sursa (job #1082251)
//
// main.c
// transport
//
// Created by Alexandru Bâgu on 1/14/14.
// Copyright (c) 2014 Alexandru Bâgu. All rights reserved.
//
#include <stdio.h>
int check(int cap, int *N, int n)
{
int i, k = 0, c = 0, ck = 0;
for(i = 0; i <= n; i++)
{
if(N[i] > cap) return -1;
if(N[i] + c <= cap)
c += N[i];
if(c + N[i+1] > cap)
{
c = 0;
k++;
}
}
while(c > cap)
k ++, c -= cap;
if(c != 0) k ++;
return k;
}
int main(int argc, const char * argv[])
{
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
int n, k;
scanf("%d%d", &n, &k);
int *N = (int*)malloc((n+1)* sizeof(int));
N[n] = 0;
int i, s;
int max = 0, min = 16001;
for(i = 0; i < n; i++)
{
scanf("%d", N + i);
max += N[i];
if(min > N[i]) min = N[i];
}
int f = 0;
i = 0;
s = 1 << 30;
while(s >>= 1 > 0)
{
if(i + s < max)
{
int res = check(i + s, N, n);
if(res == -1)
i += s;
else
if(res >= k)
i += s;
//else
// i -= s;
}
}
while(check(i, N, n) == k)
i--;
printf("%d", i + 1);
return 0;
}