Pagini recente » Cod sursa (job #1077075) | Cod sursa (job #2754881) | Cod sursa (job #1906149) | Cod sursa (job #1640847) | Cod sursa (job #2770918)
// Transport.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
#include <fstream>
#pragma warning(disable: 4996)
#define DIM 16006
using namespace std;
FILE* fin, * fout;
int N, A[DIM], K;
int upper_bound = 0; // =Sum(A[1],...,A[N])
int C;
static inline void Read()
{
fscanf(fin, "%d %d", &N, &K);
for (int i = 1; i <= N; i++)
{
fscanf(fin, "%d", &A[i]);
upper_bound += A[i];
}
}
bool Condition(int C)
{
int ret = 0, stiva = 0;
for (int i = 1; i <= N; i++)
if (A[i] > C)
return false;
for (int i = 1; i <= N; i++)
{
if (stiva + A[i] >= C || i == N)
{
stiva = 0;
ret++;
}
stiva += A[i];
}
return (ret <= K);
}
static inline void Solve()
{
// Cautare Binara discretă pe capacitatea C
int st = 1, dr = upper_bound;
while (st <= dr)
{
int mij = (st + dr) / 2;
if (Condition(mij)) {
C = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
fprintf(fout, "%d", C);
}
int main()
{
fin = fopen("transport.in", "r");
fout = fopen("transport.out", "w");
Read();
Solve();
fclose(fin);
fclose(fout);
return 0;
}