Pagini recente » Cod sursa (job #1884720) | Cod sursa (job #2593533) | Cod sursa (job #2793129) | Cod sursa (job #916818) | Cod sursa (job #1260343)
#include <stdio.h>
FILE *fin, *fout;
int *p;
int main()
{
fin = fopen("transport.in", "r");
fout = fopen("transport.out", "w");
int n, m, dr = 0, st = 0, last = 0;
fscanf(fin, "%d %d", &n, &m);
p = new int[n];
for(int i = 0; i< n; i++)
{
fscanf(fin, "%d", &p[i]);
if(p[i] > st) st = p[i];
dr += p[i];
}
int mij, s = 0, count = 0;
while(1)
{
mij = (st+dr)/2;
count = 0;
for(int i =0; i< n; i++)
{
if(s + p[i] <= mij) s+=p[i];
else
{
s = p[i];
count++;
}
}
if(count > m) st = mij+1;
if(count <= m) dr = mij;
if(mij == last) break;
last = mij;
}
fprintf(fout, "%d\n", mij);
return 0;
}