Pagini recente » Cod sursa (job #1726008) | Cod sursa (job #1996357) | Cod sursa (job #2726397) | Cod sursa (job #261206) | Cod sursa (job #2718849)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
const int MAXP = 14;
const int MAXV = 16000;
const int MAXN = 16000;
int minim = 16001;
int saltele[MAXN];
int verif_trans( int k, int n, int volum ){
int i, nr_trans, suma;
suma = 0;
i = 0;
nr_trans = 0;
while( i < n && nr_trans < k ){
if( suma + saltele[i] > volum ){
//out<<saltele[i]<<" "<<suma<<" "<<volum<<" "<<nr_trans<<'\n';
suma = 0;
nr_trans++;
}
suma += saltele[i];
i++;
}
if( nr_trans < k && i == n ){
if( volum < minim )
minim = volum;
return 1;
}
return 0;
}
int caut_bin( int k, int n ){
int step, pos;
step = 1<<MAXP;
pos = 0;
while( step ){
if( pos + step <= MAXV && verif_trans( k, n, pos + step ) == 1 && pos + step < minim)
pos+=step;
step/=2;
}
return pos;
}
int main()
{
int n, k, i;
in>>n>>k;
for( i = 0; i < n; i++ )
in>>saltele[i];
caut_bin(k, n);
out<<minim;
return 0;
}