Pagini recente » Cod sursa (job #1120340) | Cod sursa (job #2178364) | Cod sursa (job #918087) | Istoria paginii runda/3735 | Cod sursa (job #2018705)
#include <bits/stdc++.h>
#define MAX 16001
#define INIT 256000000
using namespace std;
FILE *f1 = fopen("transport.in", "r");
FILE *f2 = fopen("transport.out", "w");
int n, k, i, j, v[MAX], Min = INIT, Max = -1;
int transport(int val)
{
int sum = 0, i, t = 1;
for (i = 1; i <= n; i++)
{
if (sum + v[i] <= val)
sum += v[i];
else
{
t++;
sum = v[i];
if (t > k)
break;
}
}
if (t <= k)
return 1;
return 0;
}
void cautB(int l, int r)
{
int mij = l + (r - l) / 2;
if (l > r)
return;
int res = transport(mij);
if (res == 0)
cautB(mij + 1, r);
else
{
if (Min > mij)
Min = mij;
cautB(l, mij - 1);
}
}
int main()
{
fscanf(f1, "%d%d", &n, &k);
for (i = 1; i <= n; i++)
{
fscanf(f1, "%d", &v[i]);
if (Max < v[i])
Max = v[i];
}
fclose(f1);
cautB(Max, INIT);
fprintf(f2, "%d\n", Min);
fclose(f2);
return 0;
}