Pagini recente » Cod sursa (job #2422681) | Cod sursa (job #768875) | Cod sursa (job #3195461) | Cod sursa (job #3219316) | Cod sursa (job #3181626)
#include <bits/stdc++.h>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
const int NMAX = 16000;
const int DRUMMAX = NMAX * NMAX;
int v[NMAX+1];
int main()
{
int n, k, i, st = 0, dr = 0, ans;
in >> n >> k;
for( i = 1 ; i <= n ; i++ ){
in >> v[i];
dr += v[i];
st = max(st, v[i]);
}
while( st <= dr ){
int suma = v[1], drumuri = 0, rez = ( st + dr ) / 2;
if( suma <= rez ){
for( i = 2 ; i <= n && drumuri < k; i++ ){
suma += v[i];
if( suma > rez )
drumuri++, suma = v[i];
else if( suma == rez ){
suma = 0;
drumuri++;
}
}
if( i == n+1 ){
if( drumuri < k || ( drumuri == k && suma == 0 )){
dr = rez-1;
ans = rez;
}
else
st = rez + 1;
}
else
st = rez + 1;
}
else
st = rez + 1;
}
out << ans << endl;
return 0;
}