Pagini recente » Cod sursa (job #1861325) | Cod sursa (job #2920724) | Cod sursa (job #3248570) | Cod sursa (job #3143295) | Cod sursa (job #818958)
Cod sursa(job #818958)
#include <fstream>
#define NMAX 16001
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int N, K;
int V[NMAX];
int sum, smax, rez;
void read() {
int i;
fin >> N >> K;
for(i = 1; i <= N; ++ i) {
fin >> V[i];
sum += V[i];
if(V[i] > smax) smax = V[i];
}
rez = sum;
}
int check(int m) {
int i, S = 0, nrTransport = 1;
for(i = 1; i <= N; ++ i)
{
if(S + V[i] <= m)
S += V[i];
else {
++ nrTransport;
if(V[i] > m) return 0;
S = V[i];
}
}
if(nrTransport > K) return 0;
if(m < rez) rez = m;
return 1;
}
void binary_search(int st, int dr) {
int m = (st + dr) / 2;
if(st >= dr) return ;
if(check(m)) binary_search(st, m);
else binary_search(m + 1, dr);
}
int main() {
read();
binary_search(smax, sum);
fout << rez << '\n';
return 0;
}