Pagini recente » Cod sursa (job #2870026) | Cod sursa (job #1055463) | Cod sursa (job #1683013) | Cod sursa (job #1090917) | Cod sursa (job #1505216)
#include <iostream>
#include <fstream>
using namespace std;
ifstream inf("transport.in");
ofstream outf("transport.out");
int v[16001];
int k, n, maxim, mij, s, low, high;
unsigned int i;
void citeste ();
void rezolva ();
void afiseaza ();
bool check (int x)
{
unsigned int i;
int a, s;
a = 0;
for (i=1; i<=n;)
{
s = 0;
while (s+v[i] <= x)
s = s+v[i++];
a++;
}
if (a <= k)
return 1;
return 0;
}
int main()
{
citeste ();
rezolva ();
afiseaza ();
return 0;
}
void citeste ()
{
inf >> n >> k;
for (i=1; i<=n; i++)
inf >> v[i];
}
void rezolva ()
{
maxim = v[1];
s = 0;
for (i=2; i<=n; i++)
maxim = max (maxim, v[i]);
for (i=1; i<=n; i++)
s = s+v[i];
low = maxim-1;
high = s+1;
while (high-low > 1)
{
mij = (high+low)/2;
if (check(mij) == 1)
high = mij;
else
low = mij;
}
}
void afiseaza ()
{
outf << high;
}