Pagini recente » Cod sursa (job #2258397) | Cod sursa (job #2404239) | Cod sursa (job #2255659) | Cod sursa (job #1047046) | Cod sursa (job #2633751)
#include <fstream>
using namespace std;
ifstream fin( "transport.in" );
ofstream fout( "transport.out" );
const int MaxN = 16000;
int s[MaxN];
static inline int canTransport( int n, int k, int cp ) {
int i, t = 1, ccp = cp;
for ( i = 0; i < n; ++i ) {
if ( ccp - s[i] >= 0 ) {
ccp -= s[i];
} else {
ccp = cp - s[i];
++t;
}
}
if ( t <= k ) {
return 1;
}
return 0;
}
void solve( int n, int k, int sum, int max ) {
int st = max, dr = sum, mij;
while ( dr - st > 1 ) {
mij = (st + dr) / 2;
if ( canTransport( n, k, mij ) ) {
dr = mij;
} else {
st = mij;
}
}
if ( canTransport( n, k, st ) ) {
fout << st;
} else {
fout << dr;
}
}
int main() {
int n, k, i, sum = 0, max = 0;
fin >> n >> k;
for ( i = 0; i < n; ++i ) {
fin >> s[i];
max = max < s[i] ? s[i] : max;
sum += s[i];
}
solve( n, k, sum, max );
fin.close();
fout.close();
return 0;
}