Pagini recente » Cod sursa (job #1834905) | Cod sursa (job #603520) | Cod sursa (job #2837916) | Cod sursa (job #1017483) | Cod sursa (job #1082254)
//
// 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;
c += N[i];
if(c > cap)
{
i--;
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 || res > k)
i += s;
}
}
//while(check(i, N, n) > k) i++;
printf("%d", i + 1);
return 0;
}