Pagini recente » Cod sursa (job #1116119) | Cod sursa (job #2965657) | Cod sursa (job #2544485) | Cod sursa (job #1068683) | Cod sursa (job #480660)
Cod sursa(job #480660)
#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;
//float x;
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];
}
//x =
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);
//float f = (float)10/9;
//printf("%f\n",f);
//int w = ceil(f);
//printf("%d",w);
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;
//x = (float)r/(k-j);
//y = ;x
while(m>=((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];
}
// else
// if(i<n && a[i] < min_growth) min_growth = 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;
}