Pagini recente » Cod sursa (job #3040513) | Cod sursa (job #1562335) | Cod sursa (job #1511203) | Cod sursa (job #1684001) | Cod sursa (job #1254724)
#include <fstream>
using namespace std;
#define Nmax 16001
int n, k, maxV = 0;
int v[Nmax], s[Nmax];
void read() ;
bool ok(int) ;
int main()
{
int a, b, m;
read();
a = maxV; b = s[n];
while(a < b)
{
m = (a + b) >> 1;
if(ok(m)) b = m;
else a = m + 1;
}
ofstream fout("transport.out");
fout << a << '\n';
fout.close();
return 0;
}
void read()
{
ifstream fin("transport.in");
fin >> n >> k;
for(int i = 1; i <= n; ++i)
{
fin >> v[i];
if(v[i] > maxV) maxV = v[i];
s[i] = s[i-1] + v[i];
}
fin.close();
}
bool ok(int c)
{
int st, dr, nr = 0, S;
for(st = 1; st <= n; )
{
S = 0;
for(dr = st; S + v[dr] <= c && dr <= n; ++dr)
S += v[dr];
//intervalul [st, dr) are capacitatea <= c
if(st == dr) return 0;
st = dr; ++nr;
}
return (nr <= k);
}