Pagini recente » Cod sursa (job #3000830) | Cod sursa (job #2143967) | Cod sursa (job #1929478) | Cod sursa (job #269627) | Cod sursa (job #1886327)
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
const int NMax = 16005;
int N,K,Max,Sol = -1,S;
int X[NMax];
void Read()
{
fin >> N >> K;
for(int i = 1; i <= N; ++i)
{
fin >> X[i];
Max = max(Max,X[i]);
S += X[i];
}
}
int Check(int Value)
{
int Nr = 0, Sum = 0;
for(int i = 1; i <= N; ++i)
{
if(Sum + X[i] <= Value)
Sum += X[i];
else
{
Sum = X[i];
Nr++;
}
}
return (Nr <= K);
}
void Solve()
{
int Left = Max, Right = S;
while(Left <= Right)
{
int Mid = (Left + Right) / 2;
if(Check(Mid))
{
Sol = Mid;
Right = Mid - 1;
}
else
Left = Mid - 1;
}
}
void Print()
{
fout << Sol << "\n";
}
int main()
{
Read();
Solve();
Print();
return 0;
}