Pagini recente » Cod sursa (job #531072) | Cod sursa (job #2965554) | Cod sursa (job #2716780) | Cod sursa (job #3196677) | Cod sursa (job #482187)
Cod sursa(job #482187)
#include <stdio.h>
using namespace std;
int v[16001];
int n, K, i, j, k;
int st, dr, mijl;
int Min = 160000001;
int verificare ()
{
int grupe = 0, cap = 0;
i = 1;
while (i <= n)
{
while (cap + v[i] <= mijl)
{
cap += v[i];
i ++;
}
cap = 0;
grupe ++;
}
if (grupe <= K)
return 1;
else
return 0;
}
int main ()
{
FILE *f = fopen ("transport.in","r");
FILE *g = fopen ("transport.out","w");
fscanf (f,"%d %d", &n, &K);
for (i=1; i<=n; ++i)
{
fscanf (f,"%d", &v[i]);
if (v[i] > st)
st = v[i];
dr += v[i];
}
while (st <= dr)
{
mijl = (st + dr) / 2;
if (verificare ())
{
if (mijl < Min)
Min = mijl;
dr = mijl - 1;
}
else if (mijl < Min)
st = mijl + 1;
else
dr = mijl - 1;
}
fprintf (g, "%d\n", mijl);
fclose (g);
fclose (f);
return 0;
}