Pagini recente » Cod sursa (job #2723091) | Cod sursa (job #1070928) | Cod sursa (job #2541520) | Cod sursa (job #410967) | Cod sursa (job #339625)
Cod sursa(job #339625)
#include<stdio.h>
#define dim 16001
int v[dim];
int N, K, sum;
int greedy(int C)
{
int i = 1, suma = 0, cont = 0;
while(i <= N)
{
while( (suma < C) && (i <= N) )
{
suma = suma + v[i];
i++;
}
if(suma > C) {suma = 0; i--; cont++;}
else if(suma == C) {suma = 0; cont++;}
else cont++;
}
return cont;
}
int caut(int li, int ls)
{
int jum;
jum = ( li + ls ) / 2;
while(li < ls)
{
if( greedy(jum) > K ) li = jum + 1;
else ls = jum;
jum = ( li + ls ) / 2;
}
return jum;
}
int main()
{
int i, max = 0;
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 = sum + v[i];
if(v[i] > max) max = v[i];
}
if( K == 1 )
{
printf("%d\n", sum);
return 0;
}
i = caut(max, sum);
printf("%d\n", i);
return 0;
}