Pagini recente » Cod sursa (job #2311368) | Cod sursa (job #916383) | Cod sursa (job #2173103) | Cod sursa (job #2341408) | Cod sursa (job #607349)
Cod sursa(job #607349)
#include <iostream>
#include <cstdio>
#define NMax 16005
#define Inf 256000005
using namespace std;
int N, K, V[NMax], Minim, S;
void Read ()
{
freopen ("transport.in", "r", stdin);
scanf ("%d %d", &N, &K);
for (int i=1; i<=N; ++i)
{
scanf ("%d", &V[i]);
if (V[i]>Minim)
{
Minim=V[i];
}
}
}
void Print ()
{
freopen ("transport.out", "w", stdout);
printf ("%d\n", S);
}
bool Possible (int C)
{
int CurrentV=0, CurrentK=0;
for (int i=1; i<=N; ++i)
{
if (CurrentV+V[i]<=C)
{
CurrentV+=V[i];
}
else
{
CurrentV=V[i];
++CurrentK;
}
}
if (CurrentV>0)
{
++CurrentK;
}
if (CurrentK<=K)
{
return true;
}
return false;
}
int main()
{
Read ();
int L=Minim, R=Inf;
while (L<=R)
{
int Mid=(L+R)/2;
if (Possible (Mid))
{
S=Mid;
R=Mid-1;
}
else
{
L=Mid+1;
}
}
Print ();
return 0;
}