Pagini recente » Cod sursa (job #3141944) | Cod sursa (job #1116879) | Cod sursa (job #2372689) | Cod sursa (job #1664431) | Cod sursa (job #1123277)
#include<stdio.h>
using namespace std;
int v[16005], k, n;
int verificare (int x)
{
int s = 0, i, nrd = 0;
for (i = 1; i <= n; i++)
{
s += v[i];
if (s > x)
{
if (v[i] > x)
return 0;
s = 0;
i--;
nrd++;
}
if (s == x)
{
s = 0;
nrd++;
}
if (nrd > k)
return 0;
}
if (s != 0 && s < x && (nrd + 1 > k || nrd + 1 == k))
return 0;
return 1;
}
int cautbin( int s)
{
int sol = 0, pas = s;
while (pas > 0)
{
if (verificare(sol+pas) == 0)
sol += pas;
pas = pas / 2;
}
return sol;
}
int main ()
{
FILE *in,*out;
in = fopen ("transport.in","r");
out = fopen ("transport.out","w");
fscanf (in, "%d%d", &n, &k);
int s = 0, i;
for (i = 1; i <= n; i++)
{
fscanf (in, "%d", &v[i]);
s += v[i];
}
s = s / 2;
int sol;
sol = cautbin (s);
fprintf (out, "%d", sol);
return 0;
}