Pagini recente » Cod sursa (job #2527671) | Cod sursa (job #882961) | Cod sursa (job #2734062) | Cod sursa (job #876511) | Cod sursa (job #480655)
Cod sursa(job #480655)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int a[16000], i,j,n,k, sum=0, m, r=0, max=0,min_growth;
bool solved=false;
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
scanf("%d %d", &n, &k);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
sum += a[i];
if(a[i]>max) max = a[i];
}
m = ceil((float)sum/k);
if(m<max) m = max;
//printf("%d %d\n",n,k);
//printf("%d\n", m);
//printf("sum: %d\n",sum);
while(!solved)
{
r = sum;
//printf("r: %d\n",r);
//printf("r: %f\n",(float)r);
//printf("r: %d\n",r);
i=0;
j=0;
min_growth=16001;
while(m>=(ceil((float)r/(k-j))))
{
//printf("r: %d\n",r);
max = a[i];
i++;
while(i<n && max<m) {max += a[i]; i++;}
if(max>m)
{
if(max-m < min_growth) min_growth = max-m;
max -= a[--i];
}
if(i>=n) break;
r-=max;
j++; //nr de transporturi
}
//printf("r: %d, k: %d, j: %d \n",r,k,j);
if(min_growth == 16001) min_growth = 1;
if(i>=n) solved = true;
else m+=min_growth;
}
printf("%d",m);
return 0;
}