Pagini recente » Cod sursa (job #356897) | Cod sursa (job #1501332) | Cod sursa (job #24089) | Cod sursa (job #847065) | Cod sursa (job #480656)
Cod sursa(job #480656)
#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);
//int x = ceil((float)9/3);
//printf("%d",x);
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+=1;
}
printf("%d",m);
return 0;
}